
如何在 scrapy 中将列表页和详情页内容保存到同一项中
原帖中遇到的问题是,如何将列表页抓取到的标题、时间、url 与详情页抓取到的内容一起存储到一个项目中。
解决办法是利用 scrapy 的 meta 传递参数。meta 是一种字典,可以存储任意数据并将其传递给回调函数。
以下是修改后的代码:
def parse(self, response):
# 获取列表页的标题、时间、URL
titles = response.xpath('//title/text()').extract()
times = response.xpath('//time/text()').extract()
urls = response.xpath('//a/@href').extract()
# 将列表页数据存储在 meta 中
for url in urls:
meta = {'title': titles[0], 'time': times[0]}
yield scrapy.Request(url, callback=self.parse_item, meta=meta)
def parse_item(self, response):
# 从 meta 中获取列表页数据
meta = response.meta
# 获取详情页内容
content = response.xpath('//article/text()').extract()
# 将详情页内容与列表页数据一起创建 Item
item = {
'title': meta['title'],
'time': meta['time'],
'content': content
}
yield item这样,列表页和详情页的内容就可以在一个 item 中组合在一起了。meta 允许在回调函数之间传递数据,确保所有必要的信息都可用于创建完整的 item。
以上就是如何使用 Scrapy 的 meta 在列表页和详情页之间传递数据并保存到同一个 Item 中?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号