詳解向scrapy中的spider傳遞參數(shù)的幾種方法(2種)
有時需要根據(jù)項目的實際需求向spider傳遞參數(shù)以控制spider的行為,比如說,根據(jù)用戶提交的url來控制spider爬取的網(wǎng)站。在這種情況下,可以使用兩種方法向spider傳遞參數(shù)。
第一種方法,在命令行用crawl控制spider爬取的時候,加上-a選項,例如:
scrapy crawl myspider -a category=electronics
然后在spider里這樣寫:
import scrapy class MySpider(scrapy.Spider): name = 'myspider' def __init__(self, category=None, *args, **kwargs): super(MySpider, self).__init__(*args, **kwargs) self.start_urls = ['http://www.example.com/categories/%s' % category] # ...
也就是在spider的構(gòu)造函數(shù)里加上帶入的參數(shù)即可。
第二種方法,在用scrapyd控制spider的時候,可以向schedule.json發(fā)送-d選項加入?yún)?shù),同樣的,也需要在spider的構(gòu)造函數(shù)里如上寫法。例如:
$ curl http://localhost:6800/schedule.json -d project=myproject -d spider=somespider -d setting=DOWNLOAD_DELAY=2 -d arg1=val1
另外,如果需要在scrapy發(fā)出的request上加入?yún)?shù),可以使用request的meta參數(shù),然后就可以相應(yīng)的在返回的respose對象中獲得傳入的參數(shù)。這在某些情況下相當(dāng)有用,比如說需要確定這個url是哪個用戶請求爬取的,可以先用上面兩種方法之一將信息傳遞給spider,spider就可以把這個信息加入到request中,然后在相應(yīng)的reponse中就可以將這個信息與從url的頁面中獲得的信息一起存入數(shù)據(jù)庫。例如:
def parse_page1(self, response): item = MyItem() item['main_url'] = response.url request = scrapy.Request("http://www.example.com/some_page.html", callback=self.parse_page2) request.meta['item'] = item return request def parse_page2(self, response): item = response.meta['item'] item['other_url'] = response.url return item
到此這篇關(guān)于詳解向scrapy中的spider傳遞參數(shù)的幾種方法(2種)的文章就介紹到這了,更多相關(guān)scrapy spider傳遞參數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python使用xlrd模塊實現(xiàn)操作Excel讀寫的方法匯總
本文介紹Python中使用xlrd、xlwt、xlutils模塊操作Excel文件的方法,xlrd用于讀取Excel文件,但2.0.0版本后不支持.xlsx格式,xlwt用于創(chuàng)建和寫入Excel文件,而xlutils主要用于復(fù)制和處理Excel文件,詳細介紹了如何打開文件、獲取工作表信息、操作行列數(shù)據(jù)和處理日期格式數(shù)據(jù)2024-10-10python中resample函數(shù)實現(xiàn)重采樣和降采樣代碼
今天小編就為大家分享一篇python中resample函數(shù)實現(xiàn)重采樣和降采樣代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-02-02Python實現(xiàn)過濾單個Android程序日志腳本分享
這篇文章主要介紹了Python實現(xiàn)過濾單個Android程序日志腳本分享,本文講解了原理、實現(xiàn)代碼、使用方法、最新代碼等內(nèi)容,需要的朋友可以參考下2015-01-01詳解python中靜態(tài)方法staticmethod用法
本文主要介紹了python中靜態(tài)方法staticmethod用法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07