meta参数传递数据不对应问题
这是个困扰我好几天的大坑,工作中需要爬去新闻网站的新闻数据,总出现item在不同函数之间传递时出现数据不对应的问题,比如url和title对不上之类的,后来知道是由于meta传递的数据是浅层拷贝的原因导致的。
scrapy的meta的作用就是在执行scrapy.Request()函数时把一些回掉函数中需要的数据传进去,meta必须是一个字典,在下一个函数中可以使用response.meta防问,这里需要注意的是,meta传递的数据是浅拷贝传递的,如果传递的数据是可变的数据类型,那么很容易造成数据不对应的错误。
解决办法参考:
def parse(self, response):
# collect `item_urls`
for item_url in item_urls:
yield Request(url=item_url, callback=self.parse_item)
def parse_item(self, response):
item = MyItem()
# populate `item` fields 收集处理一部分数据
yield Request(url=item_details_url, meta={'item': item},
callback=self.parse_details)
def parse_details(self, response):
item = response.meta['item']
# populate more `item` fields 再收集处理另外的数据
return item
<