2017-05-26 73 views
2

所以我試圖編寫可以從所有scrapy蜘蛛調用的函數。 在我的項目中,我可以定義這些函數還是需要將它們導入每個蜘蛛中?爲所有scrapy蜘蛛編寫函數

感謝

回答

2

在Python中,你不能隱式導入的代碼(至少在沒有黑客左右),畢竟明確優於隱式 - 所以它不是一個好主意。

然而在scrapy中,擁有常見功能和方法的基礎Spider類是非常普遍的。

讓我們假設你有這樣的樹:

├── myproject 
│   ├── __init__.py 
│   ├── spiders 
│   │   ├── __init__.py 
│   │   ├── spider1.py 
│   │   ├── spider2.py 
├── scrapy.cfg 

我們可以在spiders/__init__.py創建一個基本的蜘蛛:

class BaseSpider(Spider): 
    def common_parse(self, response): 
     # do something  

而且從它在你的蜘蛛繼承:

from myproject.spiders import BaseSpider 
class Spider1(BaseSpider): 
    def parse(self, response): 
     # use common methods! 
     if 'indicator' in response.body: 
      self.common_parse(response) 
+0

感謝@ Granitosaurus,但我在嘗試此操作時遇到錯誤:'ImportError:使用nam時無法導入名稱BaseSpider' e顯示的文件夾結構。試圖玩'myproject'的替代品,當我使用'從scrapy.spiders導入BaseSpider'我能夠運行蜘蛛,但它沒有找到函數。關於我在哪裏可能犯了錯誤的任何建議? – Casper

+0

@Casper你確定你的樹結構是正確的嗎?這可能是因爲你需要安裝你自己的軟件包或者更新你的pathonpath,因爲python實際上可以找到導入的位置。相似的問題:https://stackoverflow.com/questions/21352669/python-path-explained-import-from-a-subpackage – Granitosaurus

+0

原來我沒有在正確的'__init __。py'中工作。感謝您的明確解釋! – Casper