基本上我有一个真正的默认设置,一个蜘蛛子类CrawlSpider
和一个具有三个字段的项目,如下所示:
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]
现在,当我读到 Field 实际上是什么时,我感到困惑。这实际上是它的实现:
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
有人可以向我解释吗?