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
代码暂时看不懂,以后再来理解