首页  >  文章  >  后端开发  >  如何使用 Scrapy 和请求回调在 Python 中抓取产品页面(Etsy、Amazon、Ebay)

如何使用 Scrapy 和请求回调在 Python 中抓取产品页面(Etsy、Amazon、Ebay)

Patricia Arquette
Patricia Arquette原创
2024-11-06 10:58:02560浏览

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