所以,我觉得我很难把头包裹在python Dicts周围。我有一个剪贴板,我成功地设法通过网页解析字典;现在是时候插入我定义为 scrapy Field
的项目了class ApplicationItem(Item):
Case_reference = Field()
Application_name = Field()
Contact_name = Field()
Contact_telephone = Field()
我在这里创建一个python字典:
{u" Applicant's name: ": u' KIMARO COMPANY INC ',
u' Case reference: ': u' ARB/15/00696 ',
u' Contact name: ': u' ',
u' Contact telephone: ': u' 07957 140179 ' }
我的问题是我如何确保将字典中的正确值插入scrapy项目。 到目前为止我有这个:
for res, rec in application.items():
item['Case_reference'] = application.get(result(res))
item['Application_name'] = application.get(result(res))
item['Contact_name'] = application.get(result(res))
item['Contact_telephone'] = application.get(result(res))
我认为不会做我期望的事情!我实际上得到了python typeError。 有什么想法吗?
item 是我要插入的实际字段。所以它是 ApplicationItem
的一个实例item['Case_reference'] = application.get()
是我尝试从先前创建的dict插入每个字段的方式。
答案 0 :(得分:0)
由于item
不是字典,因此您无法调用item['key'] = value
。
相反,请使用:
setattr(obj, attribute, value)
试试这段代码:
class ApplicationItem(Item):
ATTRIBUTE_MAPPINGS = {
" Applicant's name: " : "Application_name",
" Case refference " : "Case_reference",
" Contact name: " : "Contact_name",
"' Contact telephone: " : "Contact_telephone",
}
Case_reference = Field()
Application_name = Field()
Contact_name = Field()
Contact_telephone = Field()
你的循环将是:
for key, value in application.iteritems():
setattr(item, ApplicationItem.ATTRIBUTE_MAPPINGS[key], application.get(result(key)))