2017-07-09 8 views
0

ここは私が掻き取ろうとしているウェブサイトのソースコードの一部です。スパイダーで日本語の文字を受け入れていない治療は

<th>会社名</th> 
<td colspan="2"> 
    <p class="realtorName"> 
     <ruby>株式会社エリア・エステート 川崎店</ruby> 
    </p> 
</td> 

そして、これがscrapyは、任意のデータ

# -*- coding: utf-8 -*- 
import scrapy 


class TestSpider(scrapy.Spider): 
    name = "test" 
    allowed_domains = ["homes.co.jp"] 
    start_urls = ['http://www.homes.co.jp/realtor/mid-122457hNYEJwIO7kDs/'] 

    def parse(self, response): 
     yield{ 
      'FAX':response.xpath('//*[@id="anchor_realtorOutline"]/div[1]/table/tbody/tr/th[contains(text(), "FAX")]/following-sibling::td/text()').extract(), 
      'Company_Name':response.xpath('//*[@id="anchor_realtorOutline"]/div[1]/table/tbody/tr/th[contains(text(), "会社名")]/following-sibling::td/p[1]/ruby/text()').extract(), 
      'TEl':response.xpath('//*[@id="anchor_realtorOutline"]/div[1]/table/tbody/tr/th[contains(text(), "TEL")]/following-sibling::td/text()').extract(), 



      } 

「TEL」と「FAX」のフィールドがデータを返すだろうが、scrapyがフィールド」のエラーがスローをフェッチしているかどうかを確認するだけのテストクモですCOMPANY_NAME」

エラー:

All strings must be XML compatible: Unicode or ASCII, no NULL bytes or control characters. 

私がやりたいことは、日本とOで、その文字列と一致しました上記のソースコードで述べたように、兄弟タグからテキストを取得します。

そして、奇妙な事実は、それが昨日走ってデータを削ったということです。これでエラーが返されます。

日本語の文字セットを含めるには何かする必要がありますか?

+0

、スクリプトUnicodeに全体XPathを変換しています。 xpathが動作する前に 'u'を追加します。しかし、それは良い解決策ではありません。 エラーはPythonの終わりのようです。 日本語のエンコーディングをスクリプト自体に追加する方法がないので、Umairが語ったように日本語の文字をutf-8にデコードせずにサポートします。 –

答えて

1

この

'Company_Name':response.xpath(u'//*[@id="anchor_realtorOutline"]/div[1]/table/tbody/tr/th[contains(text(), "会社名")]/following-sibling::td/p[1]/ruby/text()').extract(), 
+0

SAZさん、ありがとうございました。しかし、ユニコードに対する各応答をエンコードするのはちょっと面倒です。 可能であれば、誰かが私に教えてくれます。なぜ初めてそれが働いたのか、もう一度エラーを出しました。 –

+0

Question最初に成功したランと2番目のランの間の変更点:ユニコードを使用するPython 3に切り替えて、時間を保存することを検討してください。encode \ decoding unicode – SAZ

+0

何も変更されていません。それは奇妙な部分です。私はscrapyがpython 3を許可するかどうかわかりません。私はそれを見ていきます。もしpython 3がこの問題を取り除き、scrapyがそれでもうまくいくなら、それは私にとっては良いことです。 –

0

のようなあなたのXPathが動作しない理由の理由はtbodyのbecuaseで、uに文字列を追加するために追加してください。あなたはそれを取り除き、あなたが望む結果を得るかどうかをチェックする必要があります。

あなたはscrapyのドキュメントでこれを読むことができます:Umairのコードを1としてhttp://doc.scrapy.org/en/0.14/topics/firefox.html

Firefox, in particular, is known for adding <tbody> elements to tables. Scrapy, on the other hand, does not modify the original page HTML, so you won’t be able to extract any data if you use <tbody> in your XPath expressions.

+0

返信ありがとうございましたUmair、しかし、私はすでにそれについての治療のドキュメントを通過しましたが、ウェブサイト自体に ''タグがあるので、ここでは問題ではありません。 –

関連する問題