如何向scrapy中的spider傳遞參數(shù)的幾種方法
有時需要根據(jù)項目的實際需求向spider傳遞參數(shù)以控制spider的行為,比如說,根據(jù)用戶提交的url來控制spider爬取的網站。在這種情況下,可以使用兩種方法向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的構造函數(shù)里加上帶入的參數(shù)即可。
第二種方法,在用scrapyd控制spider的時候,可以向schedule.json發(fā)送-d選項加入?yún)?shù),同樣的,也需要在spider的構造函數(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ù),然后就可以相應的在返回的respose對象中獲得傳入的參數(shù)。這在某些情況下相當有用,比如說需要確定這個url是哪個用戶請求爬取的,可以先用上面兩種方法之一將信息傳遞給spider,spider就可以把這個信息加入到request中,然后在相應的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
到此這篇關于如何向scrapy中的spider傳遞參數(shù)的幾種方法的文章就介紹到這了,更多相關scrapy spider傳遞參數(shù)內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Python3標準庫之functools管理函數(shù)的工具詳解
functools模塊提供的主要工具就是partial類,可以用來“包裝”一個有默認參數(shù)的callable對象。這篇文章主要介紹了Python3標準庫functools管理函數(shù)的工具的實例詳解,需要的朋友可以參考下2020-02-02
使用pycharm和pylint檢查python代碼規(guī)范操作
這篇文章主要介紹了使用pycharm和pylint檢查python代碼規(guī)范操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06
Python 3.x讀寫csv文件中數(shù)字的方法示例
在我們日常開發(fā)中經常需要對csv文件進行讀寫,下面這篇文章主要給大家介紹了關于Python 3.x讀寫csv文件中數(shù)字的相關資料,文中通過示例代碼介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面跟著小編來一起學習學習吧。2017-08-08

