解读Scrapy回调函数callback传递参数的方式

 更新时间:2022年12月19日 10:32:01   作者:bladestone  
这篇文章主要介绍了解读Scrapy回调函数callback传递参数的方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

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传递直接变量属性值,不要使用复杂的数据结构,可以做到不同的属性值

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 使用with torch.no_grad():显著减少测试时显存占用

    使用with torch.no_grad():显著减少测试时显存占用

    这篇文章主要介绍了使用with torch.no_grad():显著减少测试时显存占用问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • DRF QuerySet Instance数据库操作功能概述

    DRF QuerySet Instance数据库操作功能概述

    这篇文章主要为大家介绍了DRF QuerySet Instance数据库处理的功能概述,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10
  • pandas如何读取含有中文的excel

    pandas如何读取含有中文的excel

    这篇文章主要介绍了pandas如何读取含有中文的excel问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • 详解tensorflow实现迁移学习实例

    详解tensorflow实现迁移学习实例

    本篇文章主要介绍了详解tensorflow实现迁移学习实例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-02-02
  • 基于OpenCV的摄像头测距的实现示例

    基于OpenCV的摄像头测距的实现示例

    本文主要介绍了基于OpenCV的摄像头测距的实现示例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • Python中如何调用系统命令和进程

    Python中如何调用系统命令和进程

    在Python编程中,subprocess库是一个功能强大的工具,本文将详细介绍subprocess库的功能和应用场景,并通过代码示例进行说明,需要的可以了解下
    2025-02-02
  • pandas去除重复列的实现方法

    pandas去除重复列的实现方法

    这篇文章主要介绍了pandas去除重复列的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-01-01
  • 详解pandas映射与数据转换

    详解pandas映射与数据转换

    这篇文章主要介绍了pandas映射与数据转换的相关资料,帮助大家更好的利用python进行数据分析,感兴趣的朋友可以了解下
    2021-01-01
  • Python+drawpad实现CPU监控小程序

    Python+drawpad实现CPU监控小程序

    这篇文章主要为大家详细介绍了如何利用Python+drawpad实现一个简单的CPU监控小程序,文中示例代码讲解详细,感兴趣的小伙伴可以尝试一下
    2022-08-08
  • python自动查询12306余票并发送邮箱提醒脚本

    python自动查询12306余票并发送邮箱提醒脚本

    这篇文章主要为大家详细介绍了Python自动查询12306余票并发送邮箱提醒脚本,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05

最新评论