Scrapy之爬取結(jié)果導(dǎo)出為Excel的實(shí)現(xiàn)過程
引言
基于Scrapy來爬取數(shù)據(jù)只是手段,這些爬取的結(jié)果需要按照一定的方式導(dǎo)出或者存儲(chǔ)到數(shù)據(jù)庫中,
excel是在日常工作中使用最為廣泛的工具之一,本文介紹如何來講爬取結(jié)果存儲(chǔ)excel文件。
環(huán)境介紹
Python 3.6.1 Scrapy 1.5.0
定義Domain對(duì)象
定義爬取數(shù)據(jù)對(duì)象的實(shí)體類:
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爬取的實(shí)體字段,無關(guān)乎類型。
定義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存儲(chǔ)爬取的結(jié)果。
open_spider()和close_spider()兩個(gè)方法都來在spider啟動(dòng)和結(jié)束的時(shí)候,執(zhí)行一些初始化和清理工作,對(duì)于pipeline操作而言:
open_spider(): 執(zhí)行文件創(chuàng)建,然后初始化exporter,并啟動(dòng)start_exporting(),開始接收Itemclose_spider(): 結(jié)束exporter的exporting,關(guān)閉文件流。export_item():用來將item保存到輸出結(jié)果中。
process_item()為pipeline中定義的方法,在pipeline在settings.py中注冊(cè)之后,將會(huì)被調(diào)用。
注冊(cè)pipeline
在settings.py文件中注冊(cè)pipeline:
ITEM_PIPELINES = {
‘enrolldata.pipelines.EnrolldataPipeline': 300,
}spider中返回item
在spider中一般通過yield的方式實(shí)現(xiàn)異步返回結(jié)果,此為spider中定義的響應(yīng)處理方法。
具體的示例如下:
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
執(zhí)行crawler
scrapy crawl enrolldata
enrolldata為項(xiàng)目的名稱。
總結(jié)
在Scrapy中提供了多種結(jié)果輸出方式,目前支持的有: xml, json, csv, pickle等多種方式,對(duì)于數(shù)據(jù)的支持也是非常方便的,這方面的內(nèi)容將在后續(xù)的內(nèi)容中進(jìn)行詳細(xì)介紹。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python實(shí)現(xiàn)Excel自動(dòng)分組合并單元格
這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)Excel自動(dòng)分組合并單元格,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-02-02
安裝ElasticSearch搜索工具并配置Python驅(qū)動(dòng)的方法
這篇文章主要介紹了安裝ElasticSearch搜索工具并配置Python驅(qū)動(dòng)的方法,文中還介紹了其與Kibana數(shù)據(jù)顯示客戶端的配合使用,需要的朋友可以參考下2015-12-12
python用tkinter實(shí)現(xiàn)一個(gè)簡(jiǎn)易能進(jìn)行隨機(jī)點(diǎn)名的界面
這篇文章主要介紹了python用tkinter實(shí)現(xiàn)一個(gè)簡(jiǎn)易能進(jìn)行隨機(jī)點(diǎn)名的界面,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
Python實(shí)現(xiàn)自動(dòng)化批量調(diào)整Word樣式
在日常工作中,處理大量的Word文檔是一個(gè)常見的任務(wù),尤其是需要批量修改文檔的樣式時(shí),本文為大家介紹了如何使用Python實(shí)現(xiàn)自動(dòng)化批量調(diào)整Word樣式,需要的可以參考下2024-12-12
python 實(shí)現(xiàn)將Numpy數(shù)組保存為圖像
今天小編就為大家分享一篇python 實(shí)現(xiàn)將Numpy數(shù)組保存為圖像,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-01-01
python 列表輸出重復(fù)值以及對(duì)應(yīng)的角標(biāo)方法
今天小編就為大家分享一篇python 列表輸出重復(fù)值以及對(duì)應(yīng)的角標(biāo)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-06-06
Python更新所有安裝的包的實(shí)現(xiàn)方式
這篇文章主要介紹了Python更新所有安裝的包的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03
python腳本實(shí)現(xiàn)統(tǒng)計(jì)日志文件中的ip訪問次數(shù)代碼分享
這篇文章主要介紹了python腳本實(shí)現(xiàn)統(tǒng)計(jì)日志文件中的ip訪問次數(shù)代碼分享,注意此腳本只適用ip在每行開頭的日志文件,需要的朋友可以參考下2014-08-08

