我最近在学习Scrapy并使用edX.org作为锻炼目标,但遇到了一些困难。
假设我要抓取此页面中的内容: https://www.edx.org/course/edx/edx-edxdemo101-edx-demo-1038#.U4BRta0zD3E
一切正常,除非我不喜欢此页面上的图片,因为它太大了。我发现第https://www.edx.org/course-list页上的列表提供的图像是我想要的,这个URL是我的抓取工具的起始位置。
如何将本课程的第二个URL(课程列表)提供的图像和第一个URL(特定课程信息)中显示的相应课程信息合并为一个项目? Scrapy API中的哪种机制可以帮助我做到这一点?
答案 0 :(得分:2)
您可以使用请求的meta
功能来传递img
网址。
# parse list page
def parse(self, response):
sel = Selector(response)
for e in sel.xpath('...'):
url = e.xpath('...').extract()[0]
img = e.xpath('...').extract()[0]
yield Request(url=url, meta={'img':img}, callback=self.parse_item)
# parse detail page
def parse_item(self, response):
img = response.meta['img']
title = '...'
yield YourItem(title=title, img=img)