2016-06-10 80 views
1

我跟隨this tutorial瞭解如何一起使用scrapy和mongodb。但是,我不斷收到這些錯誤消息:如何調試scrapy管道?

[Anaconda2] C:\Users\Segovia\Dropbox\stack>scrapy crawl stack 
Traceback (most recent call last): 
    File "c:\users\segovia\anaconda2\lib\runpy.py", line 162, in _run_module_as_main 
    "__main__", fname, loader, pkg_name) 
    File "c:\users\segovia\anaconda2\lib\runpy.py", line 72, in _run_code 
    exec code in run_globals 
    File "C:\Users\Segovia\Anaconda2\Scripts\scrapy.exe\__main__.py", line 9, in <module> 
    File "c:\users\segovia\anaconda2\lib\site-packages\scrapy\cmdline.py", line 108, in execute 
    settings = get_project_settings() 
    File "c:\users\segovia\anaconda2\lib\site-packages\scrapy\utils\project.py", line 60, in get_project_settings 
    settings.setmodule(settings_module_path, priority='project') 
    File "c:\users\segovia\anaconda2\lib\site-packages\scrapy\settings\__init__.py", line 285, in setmodule 
    self.set(key, getattr(module, key), priority) 
    File "c:\users\segovia\anaconda2\lib\site-packages\scrapy\settings\__init__.py", line 260, in set 
    self.attributes[name].set(value, priority) 
    File "c:\users\segovia\anaconda2\lib\site-packages\scrapy\settings\__init__.py", line 55, in set 
    value = BaseSettings(value, priority=priority) 
    File "c:\users\segovia\anaconda2\lib\site-packages\scrapy\settings\__init__.py", line 91, in __init__ 
    self.update(values, priority) 
    File "c:\users\segovia\anaconda2\lib\site-packages\scrapy\settings\__init__.py", line 317, in update 
    for name, value in six.iteritems(values): 
    File "c:\users\segovia\anaconda2\lib\site-packages\six.py", line 599, in iteritems 
    return d.iteritems(**kw) 
AttributeError: 'list' object has no attribute 'iteritems' 

有人可以告訴我什麼可能出錯了嗎?或者,也許有人可以給我一個關於如何調試它的提示?我試過scrapy官方文檔中提供的'parse'方法,但它並不適用於我。爲了調試它,我希望我可以使用IDE和「分步」這些代碼,並詳細檢查發生了什麼。謝謝!

settings.py文件中有這些行:

ITEM_PIPELINES = ['stack.pipelines.MongoDBPipeline', ] 

MONGODB_SERVER = "localhost" 
MONGODB_PORT = 27017 
MONGODB_DB = "stackoverflow" 
MONGODB_COLLECTION = "questions" 

而且我相信「的mongod」在另一個cmd窗口運行。

+0

你可以發佈你的項目設置嗎?謝謝。 – alecxe

+0

@alecxe,我編輯了這個問題。這是你需要的嗎? – user3768495

回答

4

讓我們看看錯誤:

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

在您的項目設置,這一部分:

ITEM_PIPELINES = ['stack.pipelines.MongoDBPipeline', ]

而在這documentation page

Scrapy預計ITEM_PIPELINES是一個字典,你給它一個列表。修復它:

ITEM_PIPELINES = {'stack.pipelines.MongoDBPipeline': 300} 
+0

它的工作!驚人!對此,我真的非常感激!順便說一句,你怎麼知道這個問題在settings.py文件中?我認爲它可能在'__init__.py'文件中,但是當我打開它時,它內部是空的。這個'__init__.py'是做什麼的? – user3768495

+0

@ user3768495說實話,我懷疑這個確切的錯誤,一旦我看到了回溯,並且''list'對象沒有'iteritems'屬性,只是因爲我記得很久以前'ITEM_PIPELINES'是一個列表,然後在那裏是一個貶低警告,它將來會成爲一本字典,現在它是一本字典。我明白追溯對錯誤發生的位置沒有太大幫助,但仍然有一些線索 - 請參閱此設置= get_project_settings()調用 - 這將告訴您在讀取設置時發生錯誤。 – alecxe

+0

@ user3768495還指出,scrapy是開源的。你可以隨時查看代碼,稍微追蹤它[github repo](https://github.com/scrapy/scrapy)上的回溯。希望有所幫助。 – alecxe