2016-06-10 9 views
1

Ich folge this tutorial, um zu lernen, wie man scrapy und mongodb zusammen benutzt. Ich erhalte jedoch immer wieder folgende Fehlermeldungen:Wie kann man eine Scrapy-Pipeline debuggen?

[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' 

Kann mir jemand sagen, was möglicherweise schief gelaufen ist? Oder kann mir jemand einen Hinweis geben, wie ich es debuggen kann? Ich habe die "parse" -Methode ausprobiert, die auf der offiziellen scrapy-Dokumentation zur Verfügung gestellt wurde, aber es hat nicht für mich funktioniert. Um es zu debuggen, hoffe ich, dass ich eine IDE verwenden kann und diese Codes einchecke und überprüfe, was im Detail passiert. Vielen Dank!

Die settings.py Datei hat diese Zeilen in es:

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

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

Und ich bin sicher, dass 'mongod' in einem anderen cmd Fenster ausgeführt wird.

+0

Könnten Sie auch Ihre Projekteinstellungen posten? Vielen Dank. – alecxe

+0

@alecxe, ich habe die Frage bearbeitet. Ist das was du brauchst? – user3768495

Antwort

4

Schauen wir uns den Fehler:

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

An diesem Teil Ihrer Projekteinstellungen:

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

Und an diesem documentation page.

Scrapy erwartet ITEM_PIPELINES ein Wörterbuch zu sein und Sie geben es eine Liste. Fix it:

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

hat es funktioniert! Tolle! Ich schätze das wirklich! Übrigens, woher weißt du, dass das Problem in der Datei settings.py liegt? Ich dachte, es könnte in der '__init__.py'-Datei sein, aber wenn ich es öffne, ist es innen leer. Was macht dieses "__init__.py"? – user3768495

+0

@ user3768495 um ehrlich zu sein, vermutete ich genau diesen Fehler, nachdem ich das Traceback gesehen hatte und das Objekt '' list 'kein Attribut' iteritems' hat, nur weil ich mich daran erinnerte, dass 'ITEM_PIPELINES' eine Liste war war eine Verwarnungswarnung, dass es ein Wörterbuch in der Zukunft sein würde, und jetzt ist es ein Wörterbuch. Ich verstehe, dass die Traceback nicht viel hilft in Bezug auf wo genau der Fehler passiert ist, aber es gibt immer noch einige Hinweise - siehe diese 'settings = get_project_settings()' Anruf - dies würde Ihnen sagen, dass der Fehler beim Lesen der Einstellungen passiert .. – alecxe

+0

@ user3768495 Beachten Sie auch, dass Scrapy Open-Source ist. Sie können immer durch den Code schauen, folgen Sie etwas dem Traceback auf [github repo] (https://github.com/scrapy/scrapy). Ich hoffe, das hilft. – alecxe