Scrapy: AttributeError: у объекта 'list' нет атрибута 'iteritems'
Это мой первый вопрос по переполнению стека. В последнее время я хочу использовать утилиту для создания ссылок, поэтому я скачал и проинструктировал "scrapy crawl linkedin.com" и получил следующее сообщение об ошибке. Для вашей информации я использую anaconda 2.3.0 и python 2.7.11. Все связанные пакеты, включая scrapy и шесть, обновляются pip перед выполнением программы.
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'
Я понимаю, что эта ошибка происходит от d не тип словаря, а тип списка. А поскольку ошибка связана с кодом на scrapy, возможно, это проблема пакета scrapy или пакета из шести. Как я могу попытаться исправить эту ошибку?
РЕДАКТИРОВАТЬ: это код из 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
2 ответа
Это вызвано настройками связанного скребка:
ITEM_PIPELINES = ['linkedIn.pipelines.LinkedinPipeline']
Тем не мение, ITEM_PIPELINES
должен быть диктатом, согласно документу:
Чтобы активировать компонент Item Pipeline, вы должны добавить его класс к
ITEM_PIPELINES
установка, как в следующем примере:ITEM_PIPELINES = { 'myproject.pipelines.PricePipeline': 300, 'myproject.pipelines.JsonWriterPipeline': 800, }
Целочисленные значения, которые вы назначаете классам в этом параметре, определяют порядок их выполнения: элементы проходят от классов с более низкими значениями к классам с более высокими значениями. Обычно эти числа определяют в диапазоне 0-1000.
Согласно этому вопросу, это был список, который объясняет, почему этот скребок использует список. Поэтому вам придется либо попросить вашего разработчика скребка обновить их код, либо установить ITEM_PIPELINES
сам.
Короткий ответ: ITEM_PIPELINES должен быть словарем, а не списком с ключом в качестве класса конвейера и значением целого числа, определяющим порядок их выполнения: элементы проходят от классов с более низкими значениями к классам с более высокими значениями. Обычно эти числа определяют в диапазоне 0-1000. как объяснил @valentin Lorentz