(Ich dulde nichts Illegales, dies dient nur Bildungszwecken)
Scrapy ist eines der besten Web-Scraping-Frameworks in Python, es ist einfach zu verwenden, schnell und voller Funktionen.
Aber was wäre, wenn Sie mehrere Seiten rekursiv durchsuchen möchten? Zum Beispiel Produktseiten.
Der einfachste Weg besteht darin, einer Request-Funktion einen einfachen Rückruf hinzuzufügen.
Hier ist ein Codeausschnitt in einem Scrapy-Projekt, das eine Website mit gelisteten Produkten wie Amazon, eBay und Etsy crawlt:
def parse(self, response): links = response.css('a.s-item__link::attr(href)').getall() for link in links: yield Request(url=link, callback=self.parse_item) next_page = response.css('a.pagination___next.icon-link::attr(href)').get() if next_page: print('Next page: %s' % next_page) yield Request(url=next_page, callback=self.parse) def parse_item(self, response): title = response.xpath('//h1[@class="x-item-title___mainTitle"]/span/text()').get() price = response.xpath('//span[@id="prcIsum"]/text()').get() yield {'title':title, 'price':price}
Zunächst erfasst es die Links aller auf einer Produktseite aufgeführten Artikel mithilfe dieser Codezeile:
links = response.css('a.s-item__link::attr(href)').getall()
Dann durchläuft es jeden einzelnen dieser Links, sendet eine Anfrage zum Abrufen der Seitenquelle und führt einen Rückruf an parse_item:
durch
for link in links: yield Request(url=link,callback=self.parse_item)
Innerhalb der Funktion parse_item werden der Titel und der Preis des Artikels erfasst:
def parse_item(self, response): title = response.xpath('//h1[@class="x-item-title__mainTitle"]/span/text()').get() price = response.xpath('//span[@id="prcIsum"]/text()').get() yield {'title':title, 'price':price}
Unser Code greift dann den Link zur nächsten Seite, fordert ihn mit einem Rückruf an sich selbst (d. h. die Parse-Funktion) an und beginnt von vorne:
next_page = response.css('a.pagination__next.icon-link::attr(href)').get() if next_page: print('Next page:%s' % next_page) yield Request(url=next_page,callback=self.parse)
Los geht's, so einfach ist das!
Das rekursive Scrapen von Produktseiten mit Scrapy kann so einfach implementiert werden wie das Hinzufügen eines Callbacks zu einer Request-Funktion.
Das obige ist der detaillierte Inhalt vonSo scrapen Sie Produktseiten (Etsy, Amazon, Ebay) in Python mit Scrapy und Request Callbacks. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!