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。
詳細實例在代碼中。
源碼下載
讚賞 | |
微信 | 支付寶 |