scrapy专利爬虫(四)——数据处理

scrapy专利爬虫(四)——数据处理

说到scrapy的数据处理,就必须先介绍两个组件item和pipeline。

item

item的使用比较简单,只需要定义一个继承自scrapy.Item的类,在类中定义需要采集的元素即可,比如:

    # 专利名称
    name = scrapy.Field()
    # 类型(公告,授权公告)
    type = scrapy.Field()
    # 专利类型
    patentType = scrapy.Field()
    # 申请号
    requestNumber = scrapy.Field()
    # 申请日
    requestDate = scrapy.Field()
    # 公布日
    publishDate = scrapy.Field()

在后续的使用中,可以直接使用item.get('name')取值,item['name'] = 数据赋值。

pipeline

pipeline作为数据查重,收集等功能的管道,基本的数据处理都将这里进行。

     process_item(self, item, spider)

函数中的item是在之前spider中的回调函数yield的item,进入了这个函数后我们可以进行查重、校验和数据存储。本工程对发明人和申请人进行了校验。

    def process_item(self, item, spider):
        if self.checkForInventor(item):
            if self.checkForProposer(item):
                print(item.items())
                self.writeToExcel(item)
        return item

写入excel

由于项目对excel的需求不高,所以工程使用了xlrd,xlwd,xlutils等库,写入xls文件。

python读写excel是分别使用了两个库进行操作。写入用的是xlwd,读取用的是xlrd。而且没有提供直接修改的API,所以需要使用xlutils的copy先将excel文件读入写入实例的内存。

    def getExcel(self, mode):           # 采用工厂模式建立excel的读写实例
        if isinstance(mode, str):
            if mode.upper() == "READ":
                return xlrd.open_workbook(self.__fileName)
            elif mode.upper() == "WRITE":
                rb = xlrd.open_workbook(self.__fileName)
                return copy(rb)
        else:
            return None

写入时需要先指定sheet然后再进行写入操作。由于各种奇奇怪怪的限制,所以工程模仿安卓的SharedPreferences的使用方式,先获取editor然后每次写入需要commit。

详细实例在代码中。

源码下载

赞赏
微信支付 支付宝
微信 支付宝
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章