【问题标题】:Use Scrapy to extract info from multiple items from the item list on a page使用 Scrapy 从页面上的项目列表中的多个项目中提取信息
【发布时间】:2019-08-26 13:40:04
【问题描述】:
是否可以使用 Scrapy 从数据列表中的所有数据记录中提取一些数据,因此对于列表视图页面中的每个链接,它都会打开链接(详细信息页面),选择想要的信息,返回列表视图,首先选择下面的项目(链接),对所有项目和所有页面执行相同的工作(例如 100 页,每页有 10 条记录)。
即,如果我选择页面
我有多个项目列表,爬虫需要进入每个项目,打开详细信息视图
抓取所需信息,然后返回第 1 页(从第一个附件开始),转到另一个链接并为每个页面中的每个项目重复该工作。我知道 Scrapy 可以轻松地从第一页抓取所需的数据,例如所有商品的价格和标题,但是是否可以打开该商品,抓取一些在详细信息页面中可见的信息,然后再为其他人做一次?
【问题讨论】:
标签:
python
scrapy
web-crawler
extraction
【解决方案1】:
您正在询问如何在给定项目列表的情况下打开项目的详细信息,提取它们,返回列表,然后对剩余的项目重复。
这是可能的,但通常您不必担心返回列表。相反,这就是你所做的(例如,非工作代码):
def parse_list(self, response):
for item_selector in response.css('.item'):
item = item_data_from_selector(item_selector)
yield response.follow(
item['details_url'],
callback=self.parse_item_details,
cb_kwargs={'item': item})
def parse_item_details(self, response, item):
item_details = parse_item_details(response)
item.update(item_details)
yield item
对于每个项目,您可以从列表中提取所有数据,并为每个项目生成一个请求(response.follow,这是scrapy.Request 的替代品),指向其详细信息 URL,其中包括您的项目数据已从列表中收集。在解析商品详细信息 URL 的回调 (parse_item_details) 中,您使用详细信息 URL 中的其他详细信息更新列表中的商品数据,然后生成完整商品。
您在任何时候都不会“返回列表”。如果您需要从列表中获取下一页,请在最后从parse_list 执行此操作,从而产生对下一页的请求,但您永远不会“返回”到某个页面。当您到达一个页面时,您会从该页面产生所有请求和项目。
【解决方案2】:
我敢肯定,scrapy 文档/教程可以让您很好地了解如何执行此操作。我敢肯定,这里和网上有很多资源可以走得更远。到目前为止,您尝试过什么?