2016-05-25 82 views
13

這是我第一個關於堆棧溢出的問題。最近我想用linked-in-scraper,所以我下載並指示「scrapy crawl linkedin.com」,並得到下面的錯誤信息。爲了您的信息,我使用了anaconda 2.3.0和python 2.7.11。所有相關的軟件包,包括Scrapy和六個,在執行該程序之前都通過點更新。Scrapy:AttributeError:'list'對象沒有屬性'iteritems'

Traceback (most recent call last): 
    File "/Users/byeongsuyu/anaconda/bin/scrapy", line 11, in <module> 
    sys.exit(execute()) 
File "/Users/byeongsuyu/anaconda/lib/python2.7/site-packages/scrapy/cmdline.py", line 108, in execute 
settings = get_project_settings() 
File "/Users/byeongsuyu/anaconda/lib/python2.7/site-packages/scrapy/utils/project.py", line 60, in get_project_settings 
settings.setmodule(settings_module_path, priority='project') 
File "/Users/byeongsuyu/anaconda/lib/python2.7/site-packages/scrapy/settings/__init__.py", line 285, in setmodule 
self.set(key, getattr(module, key), priority) 
    File "/Users/byeongsuyu/anaconda/lib/python2.7/site-packages/scrapy/settings/__init__.py", line 260, in set 
self.attributes[name].set(value, priority) 
    File "/Users/byeongsuyu/anaconda/lib/python2.7/site-packages/scrapy/settings/__init__.py", line 55, in set 
value = BaseSettings(value, priority=priority) 
    File "/Users/byeongsuyu/anaconda/lib/python2.7/site-packages/scrapy/settings/__init__.py", line 91, in __init__ 
self.update(values, priority) 
    File "/Users/byeongsuyu/anaconda/lib/python2.7/site-packages/scrapy/settings/__init__.py", line 317, in update 
for name, value in six.iteritems(values): 
    File "/Users/byeongsuyu/anaconda/lib/python2.7/site-packages/six.py", line 599, in iteritems 
return d.iteritems(**kw) 

AttributeError: 'list' object has no attribute 'iteritems' 

我知道這個錯誤源於d不是字典類型,而是列表類型。由於錯誤來自scrapy上的代碼,可能是scrapy包或六個包的問題。我怎樣才能解決這個錯誤?

編輯:這是代碼scrapy.cfg

# Automatically created by: scrapy start project 
    # 
    # For more information about the [deploy] section see: 
    # http://doc.scrapy.org/topics/scrapyd.html 
    [settings] 
    default = linkedIn.settings 

    [deploy] 
    #url = http://localhost:6800/ 
    project = linkedIn 
+0

您是否有Scrapy的配置文件?它看起來像是期待讀取一個詞典,但是會找到一個列表。 –

+0

@ValentinLorentz是的我添加了上面的代碼。但我認爲它沒有關於這個問題的額外信息。編程人員構建的這段代碼說,它在Python 2.7.6上運行良好。 – user124697

回答

23

這是通過鏈接在刮板的settings造成的:

ITEM_PIPELINES = ['linkedIn.pipelines.LinkedinPipeline'] 

然而,ITEM_PIPELINES應該是一個字典, according to the doc

To activate an Item Pipeline component you must add its class to the ITEM_PIPELINES setting, like in the following example:

ITEM_PIPELINES = { 
    'myproject.pipelines.PricePipeline': 300, 
    'myproject.pipelines.JsonWriterPipeline': 800, 
} 

The integer values you assign to classes in this setting determine the order in which they run: items go through from lower valued to higher valued classes. It’s customary to define these numbers in the 0-1000 range.

根據this question,它曾經是一個列表,這解釋了爲什麼這個刮板使用一個列表。 因此,您必須要求您的開發人員更新他們的代碼,或者自己設置ITEM_PIPELINES

0

簡短的答案是ITEM_PIPELINES應該是一個字典而不是一個列表,其中鍵爲流水線類,並且值是一個整數,用於確定它們的運行順序:項從較低值到較高值類經歷。通常在0-1000範圍內定義這些數字。正如@valentin所解釋的那樣Lorentz