2016-05-25 26 views
13

これはスタックオーバーフローに関する私の最初の質問です。最近私はlinked-in-scraperを使用したいので、ダウンロードして "scrap crawl linkedin.com"と指示し、以下のエラーメッセージが表示されます。あなたの情報については、私はanaconda 2.3.0とpython 2.7.11を使用します。プログラムを実行する前に、scrapyと6を含むすべての関連パッケージが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が辞書タイプではなくリストタイプであることを理解しています。そして、エラーは治療上のコードから来ているので、おそらく治療パッケージまたは6パッケージに問題があります。このエラーを修正するにはどうすればよいですか?

EDIT:これは、これがリンクインスクレーパーのsettingsによって引き起こされる

# 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の設定ファイルはありますか?それはdictionnaryを読むことを期待しているように見えるが、代わりにリストを見つける。 –

+0

@ValentinLorentzはい私は上記のコードを追加しました。しかし、私はこの問題のための追加情報はないと思う。そして、このコードを作成したプログラマは、Python 2.7.6でUbuntuでうまく動作すると言います。 – user124697

答えて

23

をscrapy.cfgからのコードです:

ITEM_PIPELINES = ['linkedIn.pipelines.LinkedinPipeline'] 

しかし、ITEM_PIPELINESは、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.

this questionによれば、このスクレーパーがリストを使用する理由を説明するリストでした。 スクレイパーの開発者にコードの更新を依頼するか、ITEM_PIPELINESを自分で設定する必要があります。

0

簡単な答えは、ITEM_PIPELINESは、パイプラインクラスとしてのキーを持つリストではなく、値を実行する順序を決定する整数である辞書でなければなりません。アイテムは、低い値のクラスから高い値のクラスに移動します。これらの数値を0〜1000の範囲で定義するのが通例です。 @valentin Lorentzによって説明されているように

関連する問題