开发者

Scrapy之爬取结果导出为Excel的实现过程

开发者 https://www.devze.com 2022-12-20 09:29 出处:网络 作者: bladestone
目录引言环境介绍定义Domain对象定义Pipelines注册pipelinespider中返回item执行crawler总结引言
目录
  • 引言
  • 环境介绍
  • 定义Domain对象
  • 定义Pipelines
  • 注册pipeline
  • spider中返回item
  • 执行crawler
  • 总结

引言

基于Scrapy来爬取数据只是手段,这些爬取的结果需要按照一定的方式导出或者存储到数据库中,

excel是在日常工作中使用最为广泛的工具之一,本文介绍如何来讲爬取结果存储excel文件。

环境介绍

python 3.6.1 Scrapy 1.5.0

定义Domain对象

定义爬取数据对象的实体类:

import scrapy
class EnrolldataItem(scrapy.Item):
  schoolName = scrapy.Field()
  currentBATch = scrapy.Field()
  totalNumberInPlan = scrapy.Field()
  majorName = scrapy.Field()
  categoryName = scrapy.Field()
  numberInPlan = scrapy.Field()
  note = scrapy.Field()  

这里的Field表示其在Scrapy爬取的实体字段,无关乎类型。

定义Pipeline编程客栈s

from scrapy.exporters import CsvItemExporter

class 编程客栈EnrolldataPipeline(object):
  def open_spider(self, spider):
    self.file = open("/home/bladestone/enrolldata.csv", "wb")
    self.exporterwww.devze.com = CsvItemExporter(self.file,   
    fields_to_export=["schoolName", "currentBatch", "totalNumberInPlan"])
    self.exporter.start_exporting()

  def process_it开发者_开发培训em(self, item, spider):
    self.exporter.export_item(item)
    return item

  def close_spider(self, spider):
    self.exporter.finish_exporting()
    self.file.close()

这里使用了scrapy自带的CsvItemExporter存储爬取的结果。

open_spider()和close_spider()两个方法都来在spide编程客栈r启动和结束的时候,执行一些初始化和清理工作,对于pipeline操作而言:

  • open_spider(): 执行文件创建,然后初始化exporter,并启动start_exporting(),开始接收Item
  • close_spider(): 结束exporter的exporting,关闭文件流。
  • export_item():用来将item保存到输出结果中。

process_item()为pipeline中定义的方法,在pipeline在settings.py中注册之后,将会被调用。

注册pipeline

在settings.py文件中注册pipeline:

ITEM_PIPELINES = {
‘enrolldata.pipelines.EnrolldataPipeline': 300,
}

spider中返回item

在spider中一般通过yield的方式实现异步返回结果,此为spider中定义的响应处理方法。

具体的示例如下:

def parse_data():
  item = EnrolldataItem()
  item['majorName'] = major_name
  item['categoryName'] = major_category
  item['numberInPlan'] = major_number
  item['note'] = major_note
  item['schoolName'] = school_name
  item['currentBatch'] = current_batch
  item['totalNumberInPlan'] = total_number

  yield item

执行crawler

scrapy crawl enrolldata

enrolldata为项目的名称。

总结

在Scrapy中提供了多种结果输出方式,目前支持的有: XML, json, csv, pickle等多种方式,对于数据的支持也是非常方便的,这方面的内容将在后续的内编程客栈容中进行详细介绍。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号