基本上我有一个真正的默认设置,一个从 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 到底是什么时,我感到很困惑。这实际上是 its implementation :
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
是完全没有意义的。
有人能给我解释一下吗?
最佳答案
历史原因。曾经有元数据附加到存储在字典中的字段。我假设使用了一个字典,因为它有一个方便的 (key=value) 构造函数。你可以看到最后一次使用这个在this commit中被删除了.在这一点上,它几乎没有什么区别,它可能只是一个普通对象(尽管如果仍然有代码出于某种原因假定它是一个命令,则更改可能很困难)。
关于python - 为什么 Scrapy 的字段是字典?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14899815/