【问题标题】:How to store data crawled in scrapy in specfic order?如何按特定顺序存储在scrapy中爬取的数据?
【发布时间】:2014-10-14 07:35:22
【问题描述】:

我必须按照喜欢的特定顺序从网页中爬取数据报废任何字段的数据并放入 csv 文件,但我希望它应该存储我在项目类中声明的数据。我是python的新手。你能告诉我怎么做吗

例如: 我的项目类别是 类 DmozItem(项目): 标题 = 字段() 链接=字段() desc = 字段()

现在当它在 csv 文件中存储数据时,它首先存储的是 desc ,link 然后是 title "desc": [], "link": ["/Computers/Programming/"], "title": ["Programming"]}

【问题讨论】:

    标签: python-2.7 scrapy web-crawler


    【解决方案1】:

    csv 文件中的数据顺序不是你声明的顺序是因为 item 是 dict 数据类型。 dict 中键的顺序由它们的字母顺序决定。导出项目到csv文件的逻辑在

    中实现

    scrapy\contrib\exporter__init__.py

    您可以重写 BaseItemExporter 的 _get_serialized_fields 方法,让它按照您的声明顺序生成键值对。这是一个示例代码

    field_iter = ['title', 'link', 'desc']
    for field_name in field_iter:
        if field_name in item:
            field = item.fields[field_name]
            value = self.serialize_field(field, field_name, item[field_name])
        else:
            value = default_value
        yield field_name, value
    

    但请记住,这不是一个通用的解决方案。

    【讨论】:

    • 嘿,您是否建议添加一行“field_iter = ['title', 'link', 'desc']” 因为所有其他代码都是相同的,但即使添加此输出后也是一样的跨度>
    • 我也在文档中搜索过,我发现了这个:fields_to_export 一个包含将被导出的字段名称的列表,如果你想导出所有字段,则为 None。默认为无。一些导出器(如 CsvItemExporter)遵守此属性中定义的字段的顺序。但无法在 BaseItemExporter 中找到它
    • 是的,在添加 iter 列表后它对 csv 文件的工作正常,所以谢谢
    【解决方案2】:

    为此,我们必须在 BaseItemExporter 类的 fields_to_export 中创建一个列表 field_iter = ['Offer', 'SKU', 'VendorCode'] 像这样 然后必须在字段中传递此列表

    【讨论】:

      猜你喜欢
      • 2014-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-14
      • 1970-01-01
      相关资源
      最近更新 更多