Scrapy之爬取結果匯出為Excel的快速指南
阿新 • • 發佈:2019-01-02
引言
基於Scrapy來爬取資料只是手段,這些爬取的結果需要按照一定的方式匯出或者儲存到資料庫中,excel是在日常工作中使用最為廣泛的工具之一,本文介紹如何來講爬取結果儲存excel檔案。
環境介紹
Python 3.6.1 Scrapy 1.5.0
定義Domain物件
定義爬取資料物件的實體類:
import scrapy
class EnrolldataItem(scrapy.Item):
schoolName = scrapy.Field()
currentBatch = scrapy.Field()
totalNumberInPlan = scrapy.Field ()
majorName = scrapy.Field()
categoryName = scrapy.Field()
numberInPlan = scrapy.Field()
note = scrapy.Field()
這裡的Field表示其在Scrapy爬取的實體欄位,無關乎型別。
定義Pipelines
from scrapy.exporters import CsvItemExporter
class EnrolldataPipeline(object):
def open_spider(self, spider):
self.file = open("/home/bladestone/enrolldata.csv" , "wb")
self.exporter = CsvItemExporter(self.file,
fields_to_export=["schoolName", "currentBatch", "totalNumberInPlan"])
self.exporter.start_exporting()
def process_item(self, item, spider):
self.exporter.export_item(item)
return item
def close_spider (self, spider):
self.exporter.finish_exporting()
self.file.close()
這裡使用了scrapy自帶的CsvItemExporter儲存爬取的結果。
open_spider()和close_spider()兩個方法都來在spider啟動和結束的時候,執行一些初始化和清理工作,對於pipeline操作而言:
- open_spider(): 執行檔案建立,然後初始化exporter,並啟動start_exporting(),開始接收Item
- close_spider(): 結束exporter的exporting,關閉檔案流。
- export_item(): 用來將item儲存到輸出結果中。
process_item()為pipeline中定義的方法,在pipeline在settings.py中註冊之後,將會被呼叫。
註冊pipeline
在settings.py檔案中註冊pipeline:
ITEM_PIPELINES = {
‘enrolldata.pipelines.EnrolldataPipeline’: 300,
}
spider中返回item
在spider中一般通過yield的方式實現非同步返回結果,此為spider中定義的響應處理方法。具體的示例如下:
def parse_data():
item = EnrolldataItem()
item['majorName'] = major_name
item['categoryName'] = major_category
item['numberInPlan'] = major_number
item['note'] = major_note
item['schoolName'] = school_name
item['currentBatch'] = current_batch
item['totalNumberInPlan'] = total_number
yield item
執行crawler
scrapy crawl enrolldata
enrolldata為專案的名稱。
總結
在Scrapy中提供了多種結果輸出方式,目前支援的有: xml, json, csv, pickle等多種方式,對於資料的支援也是非常方便的,這方面的內容將在後續的內容中進行詳細介紹。