2016-06-10 62 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