Scrapy框架----- Item Pipeline

Item Pipeline

當Item在Spider中被收集以後,它將會被傳遞到Item Pipeline,這些Item Pipeline組件按定義的順序處理Item。html

每一個Item Pipeline都是實現了簡單方法的Python類,好比決定此Item是丟棄而存儲。如下是item pipeline的一些典型應用:python

  • 驗證爬取的數據(檢查item包含某些字段,好比說name字段)
  • 查重(並丟棄)
  • 將爬取結果保存到文件或者數據庫中

編寫item pipeline

編寫item pipeline很簡單,item pipiline組件是一個獨立的Python類,其中process_item()方法必須實現:數據庫

import something class SomethingPipeline(object): def __init__(self): # 可選實現,作參數初始化等 # doing something def process_item(self, item, spider): # item (Item 對象) – 被爬取的item # spider (Spider 對象) – 爬取該item的spider # 這個方法必須實現,每一個item pipeline組件都須要調用該方法, # 這個方法必須返回一個 Item 對象,被丟棄的item將不會被以後的pipeline組件所處理。 return item def open_spider(self, spider): # spider (Spider 對象) – 被開啓的spider # 可選實現,當spider被開啓時,這個方法被調用。 def close_spider(self, spider): # spider (Spider 對象) – 被關閉的spider # 可選實現,當spider被關閉時,這個方法被調用 

完善以前的案例:

item寫入JSON文件

如下pipeline將全部(從全部'spider'中)爬取到的item,存儲到一個獨立地items.json 文件,每行包含一個序列化爲'JSON'格式的'item':json

import json class ItcastJsonPipeline(object): def __init__(self): self.file = open('teacher.json', 'wb') def process_item(self, item, spider): content = json.dumps(dict(item), ensure_ascii=False) + "\n" self.file.write(content) return item def close_spider(self, spider): self.file.close() 

啓用一個Item Pipeline組件

爲了啓用Item Pipeline組件,必須將它的類添加到 settings.py文件ITEM_PIPELINES 配置,就像下面這個例子:scrapy

# Configure item pipelines # See http://scrapy.readthedocs.org/en/latest/topics/item-pipeline.html ITEM_PIPELINES = { #'mySpider.pipelines.SomePipeline': 300, "mySpider.pipelines.ItcastJsonPipeline":300 } 

分配給每一個類的整型值,肯定了他們運行的順序,item按數字從低到高的順序,經過pipeline,一般將這些數字定義在0-1000範圍內(0-1000隨意設置,數值越低,組件的優先級越高)ide

從新啓動爬蟲

將parse()方法改成4.2中最後思考中的代碼,而後執行下面的命令:spa

scrapy crawl itcast

查看當前目錄是否生成teacher.jsoncode

相關文章
相關標籤/搜索