刘硕的Scrapy笔记(九,exporter导出器)

scrapy常见的支持导出格式:
1.json
2.csv
3.xml
导出的时候,注意导出的文件路径(用"-o"表示)和数据格式(用"-t"表示):

scrapy crawl -t json -o book1.json

而一般我们是这么写,把"-t"省略了:

scrapy crawl -o book1.json

使用以下这行命令(书上的排版是错的):

scrapy crawl books -o export_data\%(name)s\%(time
)s.csv

可以创建一个'export_data'文件夹(可以随意命名)
里面包含一个'spiders_name'文件夹,里面有一个以创建日期命名的csv文件.

命令行的配置比较繁琐,也可以在settings里面设置:

1.FEED_URI:导出文件路径

FEED_URI='export_data\%(name)s.data'

2.FEED_FORMAT:导出文件的格式

FEED_FORMAT='csv'

3.FEED_EXPORT_ENCODING:导出文件的编码格式(默认情况下,json使用数字编码,其他格式使用'utf-8'编码)

FEED_EXPORT_ENCODING='gbk'

4.FEED_EXPORT_FIELDS:默认导出全部字段,对字段进行排序:

FEED_EXPORT_FIELDS=['name','author','price']

5.FEED_EXPORTERS:用户自定义Exporter字典,添加新格式使用的:

FEED_EXPORTERS={'excel':'my_project.my_exporters.ExcelItemExporter'}

按照书上的例子,定义excel格式(与settings同目录)下,新建my_exporters.py文件:

from scrapy.exporters import BaseItemExporter
import xlwt

class ExcelItemExporter(BaseItemExporter):
    def __init__(self,file,**kwargs):
        self._configure(kwargs)
        self.file=file
        self.wbook=xlwt.Workbook()
        self.wsheet=self.wbook.add_sheet('scrapy')
        self.row=0

    def finish_exporting(self):
        self.wbook.save(self.file)

    def export_item(self, item):
        fields=self._get_serialized_fields(item)
        for col,v in enumerate(x for _,x in fields):
            self.wsheet.write(self.row,col,v)
        self.row+=1

settings里设置:

FEED_EXPORTERS={'excel':'Book.my_exporters.ExcelItemExporter'}

爬取命令:

scrapy crawl books -t excel -o books.xls

代码暂时看不懂,以后再来理解

你可能感兴趣的:(刘硕的Scrapy笔记(九,exporter导出器))