ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

scrapy框架使用.Request使用meta传递数据,以及deepcopy的使用,这种三层for循环,就会有deepcopy的问题,

2021-09-12 06:31:17  阅读:205  来源: 互联网

标签:Request item scrapy meta 使用 传递数据 deepcopy 字典


scrapy.Request(url[,callback,method="GET",headers,body,cookies,meta,dont_filter=False])

参数meta说明:
1)meta是一个字典,主要用于解析函数之间传递值;
2)Request对象接受一个meta参数,即一个字典对象,同时Response对象有一个meta属性可以取到相应request传过来的meta;
即:一方传递,另一方接收


问题:
meta传递值,有时候当前爬虫解析出来的数据需要重复抓取,获取到的值有时需要传递给下一个函数
但是 items= response.meta['item'] 接收的时候一直是同样的值

解决:
在yield的时候,meta参数的值做深度拷贝就可以了

 

yield scrapy.Request(detail_url,
callback=self.next_page,
meta={'item': deepcopy(item)})


结合代码说明为什么爬取图书数据重复时需要deepcopy? -----这里省略代码,理解用法即可

- a = deepcopy(b) # 相当于强制传值
- scrapy中的内容是异步执行的,解析函数可能同时在执行,操作的是同一个item,
- 大分类下的所有的图书用的是一个item字典


补充:
copy与deepcopy区别:
我的理解是:copy 相当于一个替身,只是表面的假象,真主换动作了替身也要随着变;
deepcopy 当作一对双胞胎,虽然相似,但实际上是各自独立的特征

标签:Request,item,scrapy,meta,使用,传递数据,deepcopy,字典
来源: https://www.cnblogs.com/andy0816/p/15257303.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有