20

これは、スタック オーバーフローに関する私の最初の質問です。最近、linked-in-scraperを使いたくて、「scrapy crawllinkedin.com」をダウンロードして指示したところ、以下のエラーメッセージが表示されました。参考までに、私は anaconda 2.3.0 と python 2.7.11 を使用しています。Scrapy と six を含むすべての関連パッケージは、プログラムを実行する前に 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パッケージまたはsixパッケージの問題である可能性があります。このエラーを修正するにはどうすればよいですか?

編集:これは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
4

2 に答える 2

36

これは、リンクされたスクレーパーの設定が原因です:

ITEM_PIPELINES = ['linkedIn.pipelines.LinkedinPipeline']

ただし、ドキュメントによるとITEM_PIPELINES、辞書であると想定されています:

アイテム パイプライン コンポーネントを有効にするITEM_PIPELINESには、次の例のように、そのクラスを設定に追加する必要があります。

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

この設定でクラスに割り当てる整数値によって、クラスが実行される順序が決まります。アイテムは、値の低いクラスから値の高いクラスへと移動します。これらの数値を 0 ~ 1000 の範囲で定義するのが通例です。

この質問によると、以前はリストであったため、このスクレーパーがリストを使用する理由が説明されています。そのため、スクレーパーの開発者にコードの更新を依頼するか、ITEM_PIPELINES自分で設定する必要があります。

于 2016-05-26T19:10:14.570 に答える