开发者

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

开发者 https://www.devze.com 2022-12-20 09:21 出处:网络 作者: bladestone
目录Scrapy回调函数传递参数方式注意事项总结Scrapy回调函数 回调方法示例: yield Request(url=self.base_url + \'QueryInfo\', headers=sepythonlf.request_headers, method=\"POST\", body=json.dumps(request_pa
目录
  • Scrapy回调函数
  • 传递参数方式
  • 注意事项
  • 总结

Scrapy回调函数

回调方法示例:

yield Request(url=self.base_url + 'QueryInfo', headers=sepythonlf.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_IUOXiwxname):    
  # logic definitiojavascriptn

从上述方法中可知, 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.r编程客栈equest_headers, method="POST", body=json.dumps(request_params), callback=self.page_quIUOXiwxery_sc开发者_开发入门hools, cb_kwargs=dict(data_hsh=add_params))
   
def page_query_schools(self, response, data_hsh):    
  # logic definition

这种用法的错误是:data_hsh传递是引用,在循环访问中,data_hsh是指向相同的结果值,造成变量的引用有误,与预期不符。

正确的做法:cb_kwargs传递直接变量属性值,不要使用复杂的数据结构,可以做到不同的属性值

总结

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

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号