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

总结

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

相关文章

  • pandas中DataFrame数据合并连接(merge、join、concat)

    pandas中DataFrame数据合并连接(merge、join、concat)

    这篇文章主要给大家介绍了关于pandas中DataFrame 数据合并连接(merge、join、concat)的相关资料,文中介绍的非常详细,需要的朋友可以参考下
    2021-05-05
  • Python数据分析之使用scikit-learn构建模型

    Python数据分析之使用scikit-learn构建模型

    这篇文章主要介绍了Python数据分析之使用scikit-learn构建模型,sklearn提供了model_selection模型选择模块、preprocessing数据预处理模块、decompisition特征分解模块,更多相关内容需要朋友可以参考下面文章内容
    2022-08-08
  • Python利用tkinter和socket实现端口扫描

    Python利用tkinter和socket实现端口扫描

    这篇文章主要为大家详细介绍了Python如何利用tkinter和socket实现端口扫描功能,文中的示例代码讲解详细,感兴趣的小伙伴可以尝试一下
    2022-12-12
  • python引入其他py文件或模块

    python引入其他py文件或模块

    本文主要介绍了python引入其他py文件或模块,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • Python3 实现减少可调用对象的参数个数

    Python3 实现减少可调用对象的参数个数

    今天小编就为大家分享一篇Python3 实现减少可调用对象的参数个数,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • 使用Qt QSS绘制简单美化界面功能

    使用Qt QSS绘制简单美化界面功能

    这篇文章主要介绍了使用Qt QSS绘制简单美化界面,本文以绘制登录界面为例,创建一个继承自Qwidget的设计师界面类,为了使得控件排放整齐有序,可以使用layout布局进行辅助,感兴趣的朋友跟随小编一起看看吧
    2022-10-10
  • pyecharts绘制中国2020肺炎疫情地图的实例代码

    pyecharts绘制中国2020肺炎疫情地图的实例代码

    在本篇文章里小编给大家整理的是关于pyecharts绘制中国2020肺炎疫情地图的实例代码内容,有兴趣的朋友们可以测试下。
    2020-02-02
  • python实现FTP服务器服务的方法

    python实现FTP服务器服务的方法

    本篇文章主要介绍了python实现FTP服务器的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04
  • 详解Python中的装饰器、闭包和functools的教程

    详解Python中的装饰器、闭包和functools的教程

    这篇文章主要介绍了详解Python中的装饰器、闭包和functools的教程,作者还给出了相关的Flask框架下的应用实例,需要的朋友可以参考下
    2015-04-04
  • 利用Python实现一个简单的Web汇率计算器

    利用Python实现一个简单的Web汇率计算器

    Dash 是一个用于构建基于 Web 的应用程序的 Python 库,无需 JavaScript 。本文将利用Dash编写一个简单的Web汇率计算器,感兴趣的可以了解一下
    2022-08-08

最新评论