2016-04-18 10 views
0

Ich benutze Scrapy, um meine ganze Seite zu crawlen. Irgendwie sind die regulären Ausdrücke falsch.Scrapy gehen durch alle Links

Hier ist mein Teil:

def parse_items(self, response): 
     hxs = HtmlXPathSelector(response) 
     titles = hxs.xpath('//li') 
     items = [] 
     for titles in titles: 
      item = CraigslistSampleItem() 
      item["title"] = titles.xpath("a/text()").extract() 
      item["link"] = titles.xpath("a/@href").extract() 
      items.append(item) 
     return(items) 

Ich möchte alle Links in <li> analysieren, erhalten die URL und den Anker-Tag.

+0

Ich sehe keine regulären Ausdrücke in Ihrem Code – HyderA

Antwort

0

Sie brauchen nicht Ihr response Objekt HtmlXPathSelector zu werfen, weil es standardmäßig ist - nur, wenn Sie einige bösen Dinge und Ladedateien tun und ihn an die parse_items Funktion.

würde ich

for title in titles: 
    item = CraigslistSampleItem() 
    item["title"] = title.xpath("./a/text()").extract() 
    item["link"] = title.xpath("./a/@href").extract() 
    items.append(item) 

Sie verwenden versuchen, die titles Variable zu viel: wie die Liste für jedes Element Ihrer li Tags und als Variable enthält. Das ist grundsätzlich falsch. Verwenden Sie title als die Variable in der Schleife.

Wenn Sie jedoch mehrere a Tags in Ihrem HTML unter einem li haben, sollten Sie über eine andere Methode nachdenken, weil Sie eine Liste von URLs und ihren Titeln zurückbekommen würden.

+0

sollte das nicht sein item ["title"] = title.xpath ("./ a/text()"). Extract() '? – Steve

+0

Ja, sollte dieser Tippfehler behoben sein. Es ist immer schwierig, Copy-Paste-Fehler zu behandeln. Und wie ich sehe, interessiert sich der Fragesteller nicht mehr für die Frage. – GHajba

+0

Sie tun das, zumindest bekommen Sie ein "Tenacious" Abzeichen! – Steve

Verwandte Themen