解读Scrapy回调函数callback传递参数的方式
作者:bladestone 时间:2022-12-02 04:12:53
Scrapy回调函数
回调方法示例:
yield Request(url=self.base_url + 'QueryInfo', headers=self.request_headers, method="POST", body=json.dumps(request_params), callback=self.page_query_schools, cb_kwargs=add_params)
callback对应的是page_query_school()即为回调的方法。
传递参数方式
如何向回调方法中传递参数呢?
在scrapy1.7之后,是基于cb_kwargs方式传递dict类型,可以在回调方式中直接访问对应的参数值。
add_params = {}
add_params['province_code'] = province_code
add_params['province_name'] = name
yield Request(url=self.base_url + 'QueryInfo', headers=self.request_headers, method="POST", body=json.dumps(request_params), callback=self.page_query_schools, cb_kwargs=add_params)
def page_query_schools(self, response, province_code, province_name):
# logic definition
从上述方法中可知, add_params初始化为dict, 放入province_code/province_name两个值。
在page_query_schools()方法中,其中的key值直接以参数传入方法: province_code/province_name.
注意事项
错误的用法:
add_params = {}
add_params['data_item']['province_code'] = province_code
add_params['data_item']['province_name'] = name
yield Request(url=self.base_url + 'QueryInfo', headers=self.request_headers, method="POST", body=json.dumps(request_params), callback=self.page_query_schools, cb_kwargs=dict(data_hsh=add_params))
def page_query_schools(self, response, data_hsh):
# logic definition
这种用法的错误是:data_hsh传递是引用,在循环访问中,data_hsh是指向相同的结果值,造成变量的引用有误,与预期不符。
正确的做法:cb_kwargs传递直接变量属性值,不要使用复杂的数据结构,可以做到不同的属性值
来源:https://blade.blog.csdn.net/article/details/108352214
标签:Scrapy,回调函数,callback,传递参数
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Docker 安装 MySQL(8和5.7)
2024-01-26 06:49:48
css学习笔记:DIV水平垂直居中
2009-06-19 12:45:00
![](https://img.aspxhome.com/file/UploadPic/20096/19/11f7897f788g213-40s.jpg)
揭开HTML 5工作草稿的神秘面纱
2008-02-13 08:25:00
Django request.META.get()获取不到header头的原因分析
2021-03-16 00:22:39
Python Pytorch深度学习之Tensors张量
2023-05-04 12:34:54
![](https://img.aspxhome.com/file/2023/1/128751_0s.png)
Golang标准库binary详解
2024-04-25 13:19:47
![](https://img.aspxhome.com/file/2023/7/134337_0s.png)
SQL Server 数据库备份和还原认识和总结(二)
2012-10-07 10:52:52
Python3 pickle对象串行化代码实例解析
2021-12-06 14:32:07
![](https://img.aspxhome.com/file/2023/0/134900_0s.png)
Python中super()函数简介及用法分享
2021-09-23 11:56:22
python实现线程池的方法
2023-03-10 14:08:06
python中执行smtplib失败的处理方法
2023-03-31 17:41:35
Python可变参数会自动填充前面的默认同名参数实例
2022-05-24 05:00:43
Python asyncio异步编程简单实现示例
2023-09-23 15:27:52
![](https://img.aspxhome.com/file/2023/9/68419_0s.jpg)
Python深度学习神经网络残差块
2021-05-27 03:41:24
![](https://img.aspxhome.com/file/2023/6/69616_0s.png)
Python+AutoIt实现界面工具开发过程详解
2023-06-17 20:39:47
![](https://img.aspxhome.com/file/2023/1/99301_0s.png)
Pytorch可视化的几种实现方法
2023-06-11 17:44:57
![](https://img.aspxhome.com/file/2023/0/69470_0s.gif)
大大改善用户体验的10个小细节
2008-09-17 13:27:00
JavaScript 组件之旅(二):编码实现和算法
2009-10-09 14:24:00
网页设计者应当注意九大要点
2007-08-10 13:30:00
解决mysql安装时出现error Nr.1045问题的方法
2024-01-18 11:34:30
![](https://img.aspxhome.com/file/2023/2/118212_0s.jpg)