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://blog.csdn.net/blueheart20/article/details/108352214
Original: https://blog.csdn.net/weixin_36313743/article/details/114162842
Author: 相拥冰山
Title: callback回调函数–python_Scrapy回调函数callback传递参数的方式
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/789852/
转载文章受原作者版权保护。转载请注明原作者出处!