解讀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傳遞是引用,在循環(huán)訪問中,data_hsh是指向相同的結果值,造成變量的引用有誤,與預期不符。
正確的做法:cb_kwargs傳遞直接變量屬性值,不要使用復雜的數據結構,可以做到不同的屬性值
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
使用with torch.no_grad():顯著減少測試時顯存占用
這篇文章主要介紹了使用with torch.no_grad():顯著減少測試時顯存占用問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-08-08
DRF?QuerySet?Instance數據庫操作功能概述
這篇文章主要為大家介紹了DRF?QuerySet?Instance數據庫處理的功能概述,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-10-10
Python+drawpad實現CPU監(jiān)控小程序
這篇文章主要為大家詳細介紹了如何利用Python+drawpad實現一個簡單的CPU監(jiān)控小程序,文中示例代碼講解詳細,感興趣的小伙伴可以嘗試一下2022-08-08
python自動查詢12306余票并發(fā)送郵箱提醒腳本
這篇文章主要為大家詳細介紹了Python自動查詢12306余票并發(fā)送郵箱提醒腳本,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-05-05

