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。

詳細實例在代碼中。

源碼下載

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