日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

解讀Scrapy回調函數callback傳遞參數的方式_python

作者:bladestone ? 更新時間: 2023-01-18 編程語言

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

欄目分類
最近更新