如何向scrapy中的spider傳遞參數(shù)的幾種方法
有時(shí)需要根據(jù)項(xiàng)目的實(shí)際需求向spider傳遞參數(shù)以控制spider的行為,比如說(shuō),根據(jù)用戶提交的url來(lái)控制spider爬取的網(wǎng)站。在這種情況下,可以使用兩種方法向spider傳遞參數(shù)。
第一種方法,在命令行用crawl控制spider爬取的時(shí)候,加上-a選項(xiàng),例如:
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的時(shí)候,可以向schedule.json發(fā)送-d選項(xiàng)加入?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對(duì)象中獲得傳入的參數(shù)。這在某些情況下相當(dāng)有用,比如說(shuō)需要確定這個(gè)url是哪個(gè)用戶請(qǐng)求爬取的,可以先用上面兩種方法之一將信息傳遞給spider,spider就可以把這個(gè)信息加入到request中,然后在相應(yīng)的reponse中就可以將這個(gè)信息與從url的頁(yè)面中獲得的信息一起存入數(shù)據(jù)庫(kù)。例如:
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ù)的幾種方法的文章就介紹到這了,更多相關(guān)scrapy spider傳遞參數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python爬蟲抓取技術(shù)的一些經(jīng)驗(yàn)
這篇文章主要介紹了Python爬蟲抓取技術(shù)的一些經(jīng)驗(yàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07
Python3標(biāo)準(zhǔn)庫(kù)之functools管理函數(shù)的工具詳解
functools模塊提供的主要工具就是partial類,可以用來(lái)“包裝”一個(gè)有默認(rèn)參數(shù)的callable對(duì)象。這篇文章主要介紹了Python3標(biāo)準(zhǔn)庫(kù)functools管理函數(shù)的工具的實(shí)例詳解,需要的朋友可以參考下2020-02-02
使用pycharm和pylint檢查python代碼規(guī)范操作
這篇文章主要介紹了使用pycharm和pylint檢查python代碼規(guī)范操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-06-06
Python 3.x讀寫csv文件中數(shù)字的方法示例
在我們?nèi)粘i_發(fā)中經(jīng)常需要對(duì)csv文件進(jìn)行讀寫,下面這篇文章主要給大家介紹了關(guān)于Python 3.x讀寫csv文件中數(shù)字的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2017-08-08
使用Python給頭像戴上圣誕帽的圖像操作過(guò)程解析
這篇文章主要介紹了使用Python給頭像戴上圣誕帽的過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09
Pandas對(duì)數(shù)值進(jìn)行分箱操作的4種方法總結(jié)
分箱是一種常見的數(shù)據(jù)預(yù)處理技術(shù)有時(shí)也被稱為分桶或離散化,他可用于將連續(xù)數(shù)據(jù)的間隔分組到“箱”或“桶”中。本文將使用python?Pandas庫(kù)對(duì)數(shù)值進(jìn)行分箱的4種方法,感興趣的可以了解一下2022-05-05

