解讀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對應(yīng)的是page_query_school()即為回調(diào)的方法。
傳遞參數(shù)方式
如何向回調(diào)方法中傳遞參數(shù)呢?
在scrapy1.7之后,是基于cb_kwargs方式傳遞dict類型,可以在回調(diào)方式中直接訪問對應(yīng)的參數(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是指向相同的結(jié)果值,造成變量的引用有誤,與預(yù)期不符。
正確的做法:cb_kwargs傳遞直接變量屬性值,不要使用復(fù)雜的數(shù)據(jù)結(jié)構(gòu),可以做到不同的屬性值
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
使用with torch.no_grad():顯著減少測試時顯存占用
這篇文章主要介紹了使用with torch.no_grad():顯著減少測試時顯存占用問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-08-08
DRF?QuerySet?Instance數(shù)據(jù)庫操作功能概述
這篇文章主要為大家介紹了DRF?QuerySet?Instance數(shù)據(jù)庫處理的功能概述,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-10-10
詳解tensorflow實現(xiàn)遷移學(xué)習(xí)實例
本篇文章主要介紹了詳解tensorflow實現(xiàn)遷移學(xué)習(xí)實例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-02-02
Python中如何調(diào)用系統(tǒng)命令和進程
在Python編程中,subprocess庫是一個功能強大的工具,本文將詳細介紹subprocess庫的功能和應(yīng)用場景,并通過代碼示例進行說明,需要的可以了解下2025-02-02
詳解pandas映射與數(shù)據(jù)轉(zhuǎn)換
這篇文章主要介紹了pandas映射與數(shù)據(jù)轉(zhuǎn)換的相關(guān)資料,幫助大家更好的利用python進行數(shù)據(jù)分析,感興趣的朋友可以了解下2021-01-01
Python+drawpad實現(xiàn)CPU監(jiān)控小程序
這篇文章主要為大家詳細介紹了如何利用Python+drawpad實現(xiàn)一個簡單的CPU監(jiān)控小程序,文中示例代碼講解詳細,感興趣的小伙伴可以嘗試一下2022-08-08
python自動查詢12306余票并發(fā)送郵箱提醒腳本
這篇文章主要為大家詳細介紹了Python自動查詢12306余票并發(fā)送郵箱提醒腳本,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-05-05

