1. 程式人生 > >scrapy專利爬蟲(四)——資料處理

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。

詳細例項在程式碼中。

原始碼下載

讚賞
微信支付 支付寶
微信 支付寶