2017-08-12 6 views
1

i Verschrottung machen versuchen StatistikenScrapy nicht zurückgehen mit XPath

in dieser URL zu bekommen

http://www.acb.com/redaccion.php?id=133495

ich zunächst mit Spielernamen versuchen:

Import scrapy Importanforderungen von scrapy.item Import Artikel, Feld von ligafemanager.items importieren LigafemanagerItem

class Lf1Spider(scrapy.Spider): 
    name = 'lf1' 
    allowed_domains = ['acb.com'] 
    start_urls = ['http://www.acb.com/redaccion.php?id=133495'] 
    def parse(self, response): 
    self.logger.info('A response from %s just arrived!', response.url) 
    i = LigafemanagerItem() 
    i['acb_player_name'] = response.xpath('//td/div/codigo/table[1]/tbody/tr/td[2]/font/text()').extract() 
    self.logger.info('------------ACB NAME is: %s ------', 
    i['acb_player_name']) 
    return i 

Ergebnisse nie zurückgeben

Antwort

0

Nun, das ist ein schwieriger, denn was Sie sehen, ist nicht die wahre Wahrheit. Betrachten Sie den HTML von Firebug

Firebug

nun die Ansicht Quelle der gleichen Seite

View Source

diejenigen hervorgehoben Alle in Lese sind Schlüssel Fehler in Firefox Quelltext anzeigen Fenster. Beachten Sie auch eine wichtige Sache tbody fehlt. Dies geschieht bei vielen Websites, es wird nicht im HTML-Code verwendet, aber der Browser führt seine Autokorrektur durch und fügt tbody hinzu, um die Tabelle im Browser korrekt anzuzeigen.

Wenn Sie mit Skript arbeiten, ist der Tbody nicht in der Quelle und da Scrapy keine Autokorrektur durchführt, wird Ihr XPATH mit tbody das Element nicht finden, an dem Sie interessiert sind. So einfache Lösung? Entfernen tbody von Ihrem XPath

In [3]: response.xpath('//td/div/codigo/table[1]/tr/td[2]/font/text()').extract() 
Out[3]: ['Nombre'] 
+0

Erstens Dank für Ihre Hilfe, eine Frage, wenn ich schreiben // td/div/codigo/table/tr/td [2]/font/text() '). extract() Nicht alle Namen, nur die erste TR ¿Lösung? –

+0

Nun, das sollte "// td/div/Codigo // Tabelle/tr/td [2]/font/text()" Sie müssen "//" für die Zuordnung eines untergeordneten Knotens verwenden. Anstelle von '/ table' verwenden Sie' // table' –