Подтвердить что ты не робот

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 или с шестью пакетами. Как я могу попытаться исправить эту ошибку?

EDIT: Это код из 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
4b9b3361

Ответ 1

Это вызвано связанным скребком settings:

ITEM_PIPELINES = ['linkedIn.pipelines.LinkedinPipeline']

Однако ITEM_PIPELINES должен быть dict, в соответствии с документом:

Чтобы активировать компонент Item Pipeline, вы должны добавить его класс к параметру ITEM_PIPELINES, как в следующем примере:

ITEM_PIPELINES = {
    'myproject.pipelines.PricePipeline': 300,
    'myproject.pipelines.JsonWriterPipeline': 800,
}

Целочисленные значения, которые вы назначаете классам в этом параметре, определяют порядок их запуска: элементы проходят от более низкоценных до более высокоценных классов. Его обычно определять эти числа в диапазоне 0-1000.

В соответствии с этим вопросом это был список, который объясняет, почему этот скребок использует список. Поэтому вам придется либо попросить разработчика скрепера обновить свой код, либо установить ITEM_PIPELINES самостоятельно.

Ответ 2

Короткий ответ: ITEM_PIPELINES должен быть словарем, а не списком с ключом в качестве класса конвейера, а целое число, определяющее порядок их запуска: элементы проходят от более низкоценных до более высокоценных классов. Его обычно определять эти числа в диапазоне 0-1000. как объяснил @valentin Lorentz