2013-04-13 72 views
2

我有一個非常基本的蜘蛛,遵循入門指南中的說明,但出於某種原因,試圖將我的項目導入到我的蜘蛛中會返回錯誤。蜘蛛和物品代碼如下所示:無法在scrapy中導入項目

from scrapy.spider import BaseSpider 
from scrapy.selector import HtmlXPathSelector 

from myProject.items import item 

class MyProject(BaseSpider): 
    name = "spider" 
    allowed_domains = ["website.com"] 
    start_urls = [ 
     "website.com/start" 
    ] 

    def parse(self, response): 
     print response.body 

from scrapy.item import Item, Field 

class ProjectItem(Item): 
    title = Field() 

當我運行這段代碼scrapy要麼找不到我的蜘蛛,或無法導入我的項目文件。這裏發生了什麼?這應該是一個真正的例子,運行正確嗎?

回答

3

所以,這是我前幾天遇到的一個問題,我可以通過一些試驗和錯誤來修復,但我無法找到任何文檔,所以我想我會把它如果有人遇到了同樣的問題,我做了。

這不是scrapy的問題,因爲它是命名文件和python如何處理導入模塊的問題。基本上問題是,如果您將蜘蛛文件命名爲與項目相同的東西,那麼您的導入將會中斷。 Python會嘗試從最接近你當前位置的目錄中導入,這意味着它將嘗試從蜘蛛目錄導入,這是不起作用的。

基本上只是將您的蜘蛛文件的名稱更改爲其他東西,它會全部啓動並運行得很好。

2

要導入一個領域,你必須導入來自items.py 的課程,類似於myproject.items import class_name

0

如果是這樣的結構:

package/ 
    __init__.py 
    subpackage1/ 
     __init__.py 
     moduleX.py 
     moduleY.py 
    subpackage2/ 
     __init__.py 
     moduleZ.py 
    moduleA.py 

,如果你是在moduleX.py,導入其他模塊的方式可以是:

from .moduleY.py import * 

from ..moduleA.py import * 

from ..subpackage2.moduleZ.py import * 

參考:PEP Imports: Multi-Line and Absolute/Relative