基本的に、私は本当にデフォルトのセットアップ、サブクラス化されたスパイダー、CrawlSpider
および次のような3つのフィールドを持つアイテムを持っています:
class AppdexItem(Item):
name = Field()
url = Field()
desc = Field()
私のスパイダーが応答を解析すると、次のようなアイテムが入力されます。
i = AppdexItem()
name = hxs.select("//h1[@class='doc-banner-title']/text()")
i['name'] = name.extract()[0]
フィールドが実際に何であるかを読んだとき、私は混乱しました。これは文字通りその実装です:
class Field(dict):
"""Container of field metadata"""
あっさりシンプルdict
です。なぜだろうと思い、しばらく実装を見つめていました。それでも意味がありませんでした。そこでscrapy shell
、アイテムに解析されるはずのページを実行したところ、次のようになりました。
In [16]: item = spider.parse_app(response)
In [17]: item.fields
Out[17]: {'desc': {}, 'name': {}, 'url': {}}
In [18]: item['name']
Out[18]: u'Die Kleine Meerjungfrau'
何?私が何か完全に間違ったことをしている (公式のチュートリアルと例が教えてくれたようにすべてを行った) かField
、dict
まったく無意味です。
誰かが私にそれを説明できますか?