插入scrapy项目

时间:2015-02-14 19:28:55

标签: python dictionary scrapy

所以,我觉得我很难把头包裹在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插入每个字段的方式。

1 个答案:

答案 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)))