2012-10-09 56 views
0

我已經成功創建了一個蜘蛛檢索域的每個網頁的鏈接。python scrapy嘗試使用參數時無法找到蜘蛛

我想做同樣的事情,但對於我託管的域數多,爲此,我更喜歡使用我的蜘蛛,只是將它添加爲要監視的域的參數。

文檔here解釋說我們應該明確地定義構造函數並在其中添加參數,然後用命令scrapy crawl myspider啓動蜘蛛。

這裏是我的代碼:

class MySpider(BaseSpider): 
    name= 'spider' 

    def __init__(self, domain='some_domain.net'): 
     self.domain = domain 
     self.allowed_domains = [self.domain] 
     self.start_urls = [ 'http://'+self.domain ] 

    def parse(self, response): 
     hxs = HtmlPathSelector(response) 
     for url in hxs.select('//a/@href').extract(): 
      if not url.startswith('http://'): 
       url= URL + url 
      print url 
     yield Request(url, callback=self.parse) 

然而,發射

scrapy crawl spider -a domain='mydomain.my_extension' 

回報:

ERROR: unable to find spider: spider 

當我勞克相同的代碼,但沒有明確的構造,我可以」 t用爬行來做這件事,我不得不用這個命令來代替:

scrapy runspider /path/to/spider/spider.py 

,我不能使用runspider參數,我得趕緊走相反爬行

爲什麼不能使用scrapy爬行的蜘蛛? 爲什麼Spider的名字永遠不會被scrapy爬行讀取,就像scrapy runpider一樣?如果您運行scrapy 0.14你應該在類級別設置的變量,而不是在實例級別/

非常感謝您的幫助

回答

0

Scrapy看起來不錯,但在第二視力相當令人不安。我想,這已經在0.15

改變我建議你閱讀的文檔:http://doc.scrapy.org/en/0.14/topics/spiders.html

class MySpider(BaseSpider): 
     name= 'spider' 
     domain = domain 
     allowed_domains = [self.domain] 
     start_urls = [ 'http://'+self.domain ] 


    def parse(self, response): 
     hxs = HtmlPathSelector(response) 
     for url in hxs.select('//a/@href').extract(): 
      if not url.startswith('http://'): 
       url= URL + url 
      print url 
     yield Request(url, callback=self.parse)