scrapy在不同的Request之间传递数据的办法
有一次,我在采集淘宝数据的时候,发现我需要在列表页抓一些数据,也需要在详情页抓一些数据,有时候我也需要在详情的js代码源码中再抓取一些数据。
这就涉及到不同的request之间传递数据的方法了。
一个用户完整的信息要在多个Request中获取,需要在请求之间传递参数。
直到该用户所有页面数据汇总完成,提交item。
Scrapy采用的是回调(callback)的方式,把请求处理交给下一次请求,在请求时用meta传递参数。
Request(url=item_details_url, meta={‘item’: item},callback=self.parse_details),可传递简单类型参数或对象类型参数。
如果meta={‘item’: item}中如果有多个参数,则每个参数间用英文逗号隔开,例如:meta={‘item’: item,’item2′: item2}
class MySpider(BaseSpider):
name = 'myspider'
start_urls = (
'http://example.com/page1',
'http://example.com/page2',
)
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
注意,第三级的处理不能用item = MyItem()声明了,而是需要用item = response.meta[‘item’]来声明。
scrapy爬虫数据保存为txt,json,mysql的方法 清除scrapy爬虫满屏的打印信息的问题
Thank you for your sharing. I am worried that I lack creative ideas. It is your article that makes me full of hope. Thank you. But, I have a question, can you help me?
c05090f7798f06ddb2a32b3d85da2439gf5hd6f5gfsd5v6v5好玩好玩