2016-06-17 11 views
0

Ich frage mich, warum response.xpath() ein leeres Array [] in this page zurückgibt, auch wenn ich tun response.xpath('//div').extract()! Beispiel:Warum bekomme ich ein leeres Array mit (scrapy shell response.xpath())?

$ scrapy shell https://www.amazon.cn/b/2127529051 
... 
>>> response.xpath('//div').extract() 
[] 

kann ich einige Ergebnisse aus der Homepage zu bekommen, aber ich kann keine Ergebnisse von vielen anderen Seiten.

BTW, Ich versuche nicht, amazon oder etwas zu kriechen, es ist nur für Lernzwecke.

Ich habe auch andere Seiten ausprobiert, aber ich habe dieses Problem nicht, also möchte ich wissen warum.

Irgendwelche Ideen?

dank

Antwort

0

response.xpath('\\div').execute()

Diese Linie ist einfach falsch. Zuerst verwenden Sie hier Front-Schrägstriche statt Back-Schrägstriche. Auch execute() ist keine Methode von Selector oder SelectorList Objekte (das sind die Werte, die von response.xpath() -Methode zurückgegeben werden).

Versuchen: response.xpath("//div").extract()

Anders als der Code gebrochen es eine gute Praxis ist Javascript zu deaktivieren und führen view(response) genau zu sehen, was Ihre Spinne sieht. In einigen Fällen wird Ihre Spinne möglicherweise nicht einmal "//div[@id='name']" sehen, weil sie mit Javascript geladen wird.

+0

Vielen Dank für Ihre Antwort. Tatsächlich ist der Code, den ich verwendet habe korrekt, obwohl es nicht in dieser Frage ist. Ich habe tatsächlich 'response.xpath (" // div "). Extract()' verwendet, ich habe gerade den Code hier verpasst, da ich die Frage in aller Eile ausgefüllt habe. Ich versuche 'view (response)'. – XO39

+0

Ich habe versucht: 'scrapy shell https: // www.amazon.cn/b/2127529051' und' response.xpath ("// div"). Extract() 'fand mich' 605' Elemente. Stellen Sie sicher, dass Sie nicht blockiert sind. Schau dir 'response' mit' view (response) 'an und überprüfe' response.status', um zu sehen, ob du '200' bekommst. – Granitosaurus

+0

Ich habe '301' für' response.status', und eine leere Seite für 'view (response)' – XO39