我们在写爬虫的时候,经常会遇到这种情况,这里举例说明一下,比如爬一个新闻页面,首先爬的是新闻列表页pageA,从pageA里获取新闻详细页连接,然后爬新闻详情页pageB,新闻详情页pageB里有一个关于这个新闻的解说,在另一个页面pageC。这时候如果用传参的方法可以直接在爬取完成一条新闻的整个信息以后再把信息返回。
说明:
1、爬取列表信息的方法funcA
2、爬取新闻详情信息的funcB
3、爬取解说的funcC
def parse(self, response):
# collect `item_urls`
for item_url in item_urls:
yield Request(url=item_url, callback=self.funcA)
def funcA(self, response):
item = MyItem()
# 处理列表数据
yield Request(url=item_details_url, meta={'item': item},
callback=self.funcB)
def funcB(self, response):
item = response.meta['item']
# 处理新闻详情页的数据
yield Request(url=item_details_url, meta={'item': item},
callback=self.funcC)
def funcC(self, response):
item = response.meta['item']
# 处理新闻解说页的数据
return item
注意:上面代码只是说明用法
PS. 传递多个参数:
yield Request(url, meta={'item': item, 'itemB': itemB, 'itemC':itemBC}, callback=self.parse)
取出多个参数。如果不同url过来的加上判断。(如针对分页)
item = response.meta['item']
itemB = response.meta['itemB']
itemC = response.meta['itemC']