2017-07-09 10 views
0

Hier ist ein Teil des Quellcodes der Website, die ich versuche zu kratzen.Scrapy akzeptiert keine japanischen Zeichen in Spider

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

Und dies ist nur ein Test Spinne zu sehen, ob scrapy wird, um alle Daten zu holen

# -*- 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(), 



      } 

Die ‚TEL‘ und ‚FAX‘ Felder würden Daten zurückgeben aber scrapy wirft einen Fehler für das Feld ' Company_Name‘

Fehler:

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

, was ich tun wollte, dass die Zeichenfolge übereinstimmen in der japanischen und o btain den Text aus dem Geschwister-Tag wie im obigen Quellcode erwähnt.

Und die seltsame Tatsache ist, dass es gestern lief und Daten schabte. Jetzt gibt es Fehler zurück.

Muss ich etwas tun, um das japanische Zeichenset einzubinden?

+0

Per Umair den Code, das ist die ganze XPath zu den Skripten Unicode konvertieren. , d. H. Anhängen von "u", bevor der XPath funktioniert. Aber das ist keine gute Lösung. Der Fehler scheint auf dem Python-Ende zu liegen. Gibt es keine Möglichkeit, dem Skript selbst eine japanische Kodierung hinzuzufügen, so dass es japanische Zeichen unterstützt, ohne es wie Umair in utf-8 zu dekodieren. –

Antwort

1

Versuchen zu anhängen Zeichenfolge mit u, wie dieser

'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

Dank SAZ, das hat funktioniert. Aber es ist ein bisschen nervig, jede Antwort auf Unicode zu codieren. Und wenn möglich kann mir jemand sagen, warum es beim ersten Mal funktioniert hat und beim zweiten mal einen Fehler gemacht hat. –

+0

Frage, was ist der Wechsel zwischen dem ersten erfolgreichen und dem zweiten Durchlauf :) Sie sollten erwägen, zu Python 3 zu wechseln, die Unicode für ihren Interpreter verwenden, um Ihre Zeit zu speichern encode decoding Unicode – SAZ

+0

Nichts wurde geändert. Das ist der seltsame Teil. Ich weiß nicht, ob Scrapy Python 3 erlaubt. Ich schaue mir das an, wenn Python 3 dieses Problem beseitigt und Scrapy auch daran arbeitet, dann ist es besser für mich. –

0

Der Grund, warum Ihr XPath arbeiten becuase von tbody ist nicht anhängen. Sie müssen es entfernen und prüfen, ob Sie das gewünschte Ergebnis erhalten.

Sie können dies in scrapy Dokumentation lesen: 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

Vielen Dank für die Antwort Umair, aber ich habe bereits die Scrapy-Dokumentation dafür durchgesehen, aber das ist hier kein Problem, weil die Website selbst das ''-Tag hat. –

Verwandte Themen