解讀Scrapy回調(diào)函數(shù)callback傳遞參數(shù)的方式
Scrapy回調(diào)函數(shù)
回調(diào)方法示例:
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()即為回調(diào)的方法。
傳遞參數(shù)方式
如何向回調(diào)方法中傳遞參數(shù)呢?
在scrapy1.7之后,是基于cb_kwargs方式傳遞dict類型,可以在回調(diào)方式中直接訪問對應的參數(shù)值。
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值直接以參數(shù)傳入方法: 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傳遞直接變量屬性值,不要使用復雜的數(shù)據(jù)結構,可以做到不同的屬性值
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
pandas中DataFrame數(shù)據(jù)合并連接(merge、join、concat)
這篇文章主要給大家介紹了關于pandas中DataFrame 數(shù)據(jù)合并連接(merge、join、concat)的相關資料,文中介紹的非常詳細,需要的朋友可以參考下2021-05-05Python數(shù)據(jù)分析之使用scikit-learn構建模型
這篇文章主要介紹了Python數(shù)據(jù)分析之使用scikit-learn構建模型,sklearn提供了model_selection模型選擇模塊、preprocessing數(shù)據(jù)預處理模塊、decompisition特征分解模塊,更多相關內(nèi)容需要朋友可以參考下面文章內(nèi)容2022-08-08Python利用tkinter和socket實現(xiàn)端口掃描
這篇文章主要為大家詳細介紹了Python如何利用tkinter和socket實現(xiàn)端口掃描功能,文中的示例代碼講解詳細,感興趣的小伙伴可以嘗試一下2022-12-12Python3 實現(xiàn)減少可調(diào)用對象的參數(shù)個數(shù)
今天小編就為大家分享一篇Python3 實現(xiàn)減少可調(diào)用對象的參數(shù)個數(shù),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-12-12