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。
详细实例在代码中。
源码下载
赞赏 | |
微信 | 支付宝 |