2016-05-25 3 views
13

Это мой первый вопрос о переполнении стека. Недавно я хочу использовать linked-in-scraper, поэтому я загрузил и инструктировал «scrapy crawl linkedin.com» и получил следующее сообщение об ошибке. Для вашей информации я использую anaconda 2.3.0 и python 2.7.11. Все связанные пакеты, в том числе scrapy и шесть, обновляются в пункте pip перед выполнением программы.Scrapy: AttributeError: объект 'list' не имеет атрибута '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' 

Я понимаю, что эта ошибка связана с 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 
+0

У вас есть файл конфигурации для Scrapy? Похоже, он ожидает, что прочитает диктовку, но вместо этого найдет список. –

+0

@ValentinLorentz Да, я добавил код выше. Но я думаю, что у него нет дополнительной информации по этому вопросу. И программист, построенный в этом коде, говорит, что он хорошо работает на Ubuntu с python 2.7.6. – user124697

ответ

23

Это вызвано сопряженного в скребок-х settings:

ITEM_PIPELINES = ['linkedIn.pipelines.LinkedinPipeline'] 

Однако ITEM_PIPELINES должен быть ДИКТ, 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.

Согласно this question, это был список, который объясняет, почему этот скребок использует список. Так что вам придется либо попросить вашего разработчика скребка обновить свой код, либо установить ITEM_PIPELINES самостоятельно.

0

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