首頁  >  文章  >  後端開發  >  如何使用 Scrapy 和請求回呼在 Python 中抓取產品頁面(Etsy、Amazon、Ebay)

如何使用 Scrapy 和請求回呼在 Python 中抓取產品頁面(Etsy、Amazon、Ebay)

Patricia Arquette
Patricia Arquette原創
2024-11-06 10:58:02627瀏覽

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

我不會縱容任何非法行為,這僅用於教育目的

介紹

Scrapy 是 Python 中最好的網頁抓取框架之一,它易於使用、快速且功能豐富。

但是如果我們想遞歸地抓取多個頁面怎麼辦?例如產品頁面。

最簡單的方法是為請求函數添加一個簡單的回呼。

這是 Scrapy 專案中的一個程式碼片段,用於抓取包含 Amazon、eBay 和 Etsy 等列出的產品的網站:

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}

它是如何運作的?

首先,它使用以下程式碼行來取得產品頁面上列出的每個項目的連結:

links = response.css('a.s-item__link::attr(href)').getall()

然後循環遍歷每個鏈接,發送請求以獲取頁面來源並對 parse_item 進行回調:

for link in links:
     yield Request(url=link,callback=self.parse_item)

在 parse_item 函數中,它會取得商品的標題和價格:

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}

然後我們的程式碼獲取下一頁的鏈接,透過自身回調(即解析函數)來請求它,然後重新開始:

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)

結論

就是這樣,就這麼簡單!

使用 Scrapy 遞歸地抓取產品頁面可以像向 Request 函數添加回調一樣輕鬆實現。

以上是如何使用 Scrapy 和請求回呼在 Python 中抓取產品頁面(Etsy、Amazon、Ebay)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn