欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Scrapy之爬取結(jié)果導(dǎo)出為Excel的實(shí)現(xiàn)過程

 更新時(shí)間:2022年12月19日 15:00:18   作者:bladestone  
這篇文章主要介紹了Scrapy之爬取結(jié)果導(dǎo)出為Excel的實(shí)現(xiàn)過程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

引言

基于Scrapy來爬取數(shù)據(jù)只是手段,這些爬取的結(jié)果需要按照一定的方式導(dǎo)出或者存儲(chǔ)到數(shù)據(jù)庫(kù)中,

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(),開始接收Item
  • close_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)文章

最新評(píng)論