これはスタックオーバーフローに関する最初の質問です。最近 linked-in-scraper を使用したいので、「scrapy crawl linkedin.com」をダウンロードして指示し、以下のエラーメッセージを取得します。参考までに、anaconda 2.3.0とpython 2.7.11。を使用します。scrapyと6を含むすべての関連パッケージは、プログラムを実行する前に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が辞書型ではなくリスト型に起因することを理解しています。また、エラーはスクレイピーのコードに起因しているため、スクレイピーパッケージまたは6パッケージの問題である可能性があります。このエラーを修正するにはどうすればよいですか?
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
これは、リンクされたスクレーパーの settings が原因です。
ITEM_PIPELINES = ['linkedIn.pipelines.LinkedinPipeline']
ただし、ITEM_PIPELINES
は辞書であると想定されています ドキュメントによれば :
アイテムパイプラインコンポーネントをアクティブにするには、次の例のように、
ITEM_PIPELINES
設定にクラスを追加する必要があります。ITEM_PIPELINES = { 'myproject.pipelines.PricePipeline': 300, 'myproject.pipelines.JsonWriterPipeline': 800, }
この設定でクラスに割り当てる整数値は、それらが実行される順序を決定します。項目は、低い値のクラスから高い値のクラスへと通過します。これらの数値は0〜1000の範囲で定義するのが一般的です。
この質問 によると、以前はリストであったため、このスクレーパーがリストを使用する理由を説明しています。そのため、スクレーパーの開発者にコードの更新を依頼するか、ITEM_PIPELINES
を自分で設定する必要があります。
簡単な答えは、ITEM_PIPELINESはディクショナリであり、キーはパイプラインクラスであり、値は実行順序を決定する整数である必要があります。これらの数値は0〜1000の範囲で定義するのが一般的です。 @valentin Lorentzの説明通り