蒋振飞的博客 - Scrapy框架10:指定item输出项顺序   
正在加载蒋振飞的博客...
V3.0
蒋振飞的博客

Scrapy框架10:指定item输出项顺序

发布时间: 2018年09月08日 发布人: 蒋振飞 热度: 880 ℃ 评论数: 0

    以前在爬取网站的时候对字段输出的顺序没有要求,而为了更为方便地对数据进行分析和统计,我在爬取链家房产信息时发现scrapy -o csv格式输出的时候,/item/Field的顺序不是在items.py或者在scrapy中指定的顺序。如果后续有继续读取csv文件的时候,因为不是按指定顺序排列,很可能字段会搞错。 本文描述如何在输出csv的时候指定顺序字段。

1.在scrapy的spiders同层目录,新建my_project_csv_item_exporter.py文件内容如下(文件名可改,目录定死)

from scrapy.conf import settings
from scrapy.contrib.exporter import CsvItemExporter


class MyProjectCsvItemExporter(CsvItemExporter):

    def __init__(self, *args, **kwargs):
        delimiter = settings.get('CSV_DELIMITER', ',')
        kwargs['delimiter'] = delimiter

        fields_to_export = settings.get('FIELDS_TO_EXPORT', [])
        if fields_to_export:
            kwargs['fields_to_export'] = fields_to_export

        super(MyProjectCsvItemExporter, self).__init__(*args, **kwargs)

2.在同层目录,settings.py文件新增如下内容(指定item,field顺序)

FEED_EXPORTERS = {
'csv': 'my_project.my_project_csv_item_exporter.MyProjectCsvItemExporter',
} #这里假设你的project名字为my_project

FIELDS_TO_EXPORT = [
    'title',
    'address',
    'meters',
    'zone',
    'direction',
    'link',
    'price',
    'num',
    'update_date',
    'other',
]

3.在同层目录,settings.py文件指定分隔符

CSV_DELIMITER = '\t'

    如果需要其他的分隔符,可以直接修改。  
    全部设定完后,执行scrapy crawl spider -o spider.csv的时候,字段就按顺序来了。

打赏 蒋振飞

取消

感谢您的支持,我会继续努力的!

扫码支持
一分也是爱     一块不嫌多

点击 支付宝 或 微信 打赏蒋振飞

打开支付宝扫一扫,即可进行扫码打赏哦

评论列表