2011-07-02 46 views
2

我正在嘗試使用Scrapy shell來測試一些XPath,但它似乎在調用我的不完整的蜘蛛模塊來進行刮擦,這不是我想要的。有沒有一種方法可以定義哪種蜘蛛scrapy使用它的shell?更重要的是,Scrapy爲什麼這樣做;它不應該知道蜘蛛沒有準備好使用嗎?這就是我爲什麼使用shell的原因?否則,我會使用如何定義scrapy shell使用哪個蜘蛛?

scrapy crawl spider_name 

如果我想使用特定的蜘蛛。

編輯:在永久查看Spider文檔後,我在shell中使用了spider實例的以下說明。

蜘蛛 - 這是已知的處理的URL,或BaseSpider對象,如果沒有找到當前URL

這意味着蜘蛛的蜘蛛,scrapy已關聯與我的蜘蛛的網址,並使用它而不是BaseSpider。不幸的是,我的蜘蛛還沒有準備好進行測試,那麼有沒有辦法強制它使用BaseSpider來替代shell?

+0

如果你想調試你的蜘蛛,你可能希望看到的文檔的這一部分:HTTP:// doc.scrapy.org/topics/shell.html#invoking-the-shell-from-spiders-to-inspect-responses –

+0

我不是想調試我的蜘蛛,而是調試一個XPath。這是使用Scrapy shell完成的,但shell似乎在創建我定義的蜘蛛的實例,而不是默認的BaseSpider類。 – emish

+0

@ThomasK該網址現在不可用:( –

回答

4

Scrapy根據allowed_domains屬性自動選擇蜘蛛。如果給定域名有多個蜘蛛,則Scrapy將使用BaseSpider

但是,它只是一個python shell,你可以實例化任何你想要的蜘蛛。

 
>>> from myproject.spiders.myspider import MySpider 
>>> spider = MySpider() 
>>> spider.parse_item(response) 

編輯:作爲解決方法使用蜘蛛可以設置allowed_domains = []

1

shell isn't intended to be used with a spider

你可以嘗試和調試非常迅速刮 代碼,而無需 運行蜘蛛。 ... [它]用於測試XPath表達式。

+0

我明白了,這就是我想要做的,但它創建了一個我定義的蜘蛛類的實例,而不是 – emish

1

你應該修改你的設置文件,以更改DEFAULT_ITEM_CLASS

每文檔:

,將用於實例中的 Scrapy殼項使用的 缺省類。

+1

雖然這不是確切的權利回答,改變settings.py中的'SPIDER_MODULES = []'做了訣竅。 – emish