scrapy專利爬蟲(四)——資料處理
阿新 • • 發佈:2018-12-17
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。
詳細例項在程式碼中。
原始碼下載
讚賞 | |
微信 | 支付寶 |