关于解决scrapy爬虫函数之间传值的问题

有的时候我们爬取数据的时候需要在多个页面之间跳转,爬取完所有页面的数据的时候才能把所有数据一起存到数据库,这个时候我们就需要把某个函数内爬取的数据传到下一个函数当中。
有人可能会说,为什么不用全局变量呢?这是因为scrapy自带多线程机制,好几个线程同时跑,用全局变量很不明智,除非顺序逻辑非常清楚的程序。
这个时候我们就要用到scrapy中Request方法的meta参数

def first(self, response)
code = response.xpath('*****').extract()[0]
yield FormRequest(url=url,
meta={
    'code':code
}, 
formdata={},
callback=self.next)

meta和formdata属性一样,是一个字典,这里面我们把从网页中爬取到的code值放在meta中传入下一个函数

def next(self, response)
code = response.meta["code"]

在下一个函数当中我们就可以从response对象当中取得meta中的code值,这里就可以确保两个函数中code的值是完全一致的。

    原文作者:Vissioon
    原文地址: https://www.jianshu.com/p/f119505cafb9
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞