Ich möchte Daten auf dieser Website extrahieren: http://www.pokepedia.fr/Pikachu Ich lerne die Python und wie Scrapy zu verwenden und mein Problem ist: Warum kann ich die Daten nicht mit Xpath abrufen?Scrapy Xpath Ausgang leer
Mein Xpath sieht gut aus, wenn ich xpath in meinem Browser teste, es gibt mir den richtigen Wert zurück. (Google Chrome)
import re
from scrapy import Spider
from scrapy.selector import Selector
from stack.items import StackItem
class StackSpider(Spider):
name = "stack"
allowed_domains = ["pokepedia.fr"]
start_urls = [
"http://www.pokepedia.fr/Pikachu",
]
def unicodize(seg):
if re.match(r'\\u[0-9a-f]{4}', seg):
return seg.decode('unicode-escape')
return seg.decode('utf-8')
def parse(self, response):
pokemon = Selector(response).xpath('//*[@id="mw-content-text"]/table[2]')
for question in pokemon:
item = StackItem()
item['title'] = question.xpath(
'//*[@id="mw-content-text"]/table[2]/tbody/tr[1]/th[2]/text()').extract()[0]
yield item
ich den Namen des pokemon in der Seite extrahieren will, aber wenn ich benutze:
scrapy crawl stack -o items.json -t json
Mein Json Ausgang:
[
In meiner Konsole i habe diesen Fehler:
IndexError : list index out of range
ich habe folgen ed dieses tuto: https://realpython.com/blog/python/web-scraping-with-scrapy-and-mongodb/
wie in einer bereitgestellten Antwort beschrieben, seien Sie vorsichtig, wenn Sie mit einem beliebigen Webbrowser der dev console/xpath viewer vertraut sind, da das angezeigte Dokument nicht immer genau dem HTML entspricht, das die Seite erzeugt. Oft werden Tags hinzugefügt und defekter HTML-Code repariert. es ist oft besser, das html der Seite direkt herunterzuladen (das einfache Python-Skript kann das tun) und das Wort davon. Web Scraping ist ein großartiges Tool, um zu lernen, aber behalte diesen Tipp immer im Hinterkopf, er hat mich ein paar Mal gebissen. – Kaden