python - Scrapy: AttributeError: el objeto ''list'' no tiene atributo ''iteritems''
scrapy-spider six (2)
Esta es mi primera pregunta sobre el desbordamiento de pila. Recientemente, quiero usar el enlace linked-in-scraper , así que descargué e indiqué "Scrapy Crawl linkedin.com" y recibí el siguiente mensaje de error. Para su información, uso anaconda 2.3.0 y python 2.7.11. Todos los paquetes relacionados, incluidos scrapy y six, se actualizan por pip antes de ejecutar el programa.
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''
Entiendo que este error se debe a que d no es el tipo de diccionario sino el tipo de lista. Y dado que el error proviene del código en scrapy, tal vez sea un problema en un paquete scrapy o en un paquete de seis. ¿Cómo puedo intentar arreglar este error?
EDITAR: Este es el código de 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
Esto se debe a la settings del rascador vinculado:
ITEM_PIPELINES = [''linkedIn.pipelines.LinkedinPipeline'']
Sin embargo, se supone que ITEM_PIPELINES
es un dict, según el documento :
Para activar un componente Item Pipeline, debe agregar su clase a la configuración
ITEM_PIPELINES
, como en el siguiente ejemplo:
ITEM_PIPELINES = { ''myproject.pipelines.PricePipeline'': 300, ''myproject.pipelines.JsonWriterPipeline'': 800, }
Los valores enteros que asigna a las clases en esta configuración determinan el orden en el que se ejecutan: los elementos pasan de las clases de menor valor a las de mayor valor. Es habitual definir estos números en el rango 0-1000.
De acuerdo con esta pregunta , solía ser una lista, lo que explica por qué este raspador usa una lista. Por lo tanto, tendrá que pedirle a su desarrollador del raspador que actualice su código, o configurar ITEM_PIPELINES
usted mismo.
La respuesta corta es que ITEM_PIPELINES debe ser un diccionario, no una lista con la clave como la clase de canalización y un valor entero que determina el orden en el que se ejecutan: los elementos pasan de las clases de menor valor a las de mayor valor. Es habitual definir estos números en el rango 0-1000. Según lo explicado por @valentin Lorentz.