2016-05-25 17 views
13

Questa è la mia prima domanda sullo stack overflow. Recentemente voglio usare linked-in-scraper, così ho scaricato e istruire "scrapy crawl linkedin.com" e ottenere il seguente messaggio di errore. Per vostra informazione, utilizzo anaconda 2.3.0 e python 2.7.11. Tutti i pacchetti correlati, compresi scrapy e sei, vengono aggiornati da pip prima dell'esecuzione del programma.Scrapy: AttributeError: l'oggetto 'list' non ha attributo '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' 

Comprendo che questo errore deriva da d non è il tipo di dizionario ma il tipo di elenco. E dal momento che l'errore è dal codice su scrapy, forse è un problema su pacchetto scrapy o sei pacchetto. Come posso provare a correggere questo errore?

EDIT: Questo è il codice da 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

Avete un file di configurazione per Scrapy? Sembra che si aspetti di leggere un dizionario ma trovi invece una lista. –

+0

@ValentinLorentz Sì, ho aggiunto il codice sopra. Ma penso che non abbia ulteriori informazioni per questo problema. E il programmatore ha costruito questo codice dice che funziona bene su Ubuntu con python 2.7.6. – user124697

risposta

23

Ciò è causato dal Linked-in raschietto di settings:

ITEM_PIPELINES = ['linkedIn.pipelines.LinkedinPipeline'] 

Tuttavia, ITEM_PIPELINES si suppone essere un dict, 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.

Secondo this question, era una lista, il che spiega perché questo raschietto usa una lista. Quindi dovrai chiedere allo sviluppatore del raschietto di aggiornare il loro codice o impostare tu stesso lo ITEM_PIPELINES.

0

La risposta breve è che ITEM_PIPELINES deve essere un dizionario non un elenco con la chiave come classe di pipeline e valore un numero intero che determina l'ordine in cui vengono eseguiti: gli elementi passano da classi con valore inferiore a classi con valori più alti. È consuetudine definire questi numeri nell'intervallo 0-1000. come spiegato da @valentin Lorentz

Problemi correlati