Heim  >  Artikel  >  Backend-Entwicklung  >  So scrapen Sie Produktseiten (Etsy, Amazon, Ebay) in Python mit Scrapy und Request Callbacks

So scrapen Sie Produktseiten (Etsy, Amazon, Ebay) in Python mit Scrapy und Request Callbacks

Patricia Arquette
Patricia ArquetteOriginal
2024-11-06 10:58:02560Durchsuche

How to Scrape Product Pages(Etsy, Amazon, Ebay) in Python Using Scrapy and Request Callbacks

(Ich dulde nichts Illegales, dies dient nur Bildungszwecken)

Einführung

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}

Wie funktioniert es?

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)

Abschluss

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn