[摘要]網(wǎng)絡(luò)數(shù)據(jù)是重要的資產(chǎn)形態(tài)之一,提升數(shù)據(jù)提取與分析項(xiàng)目是當(dāng)下該領(lǐng)域中研究的重點(diǎn)問題之一。本文以Scrapy開源技術(shù)為基礎(chǔ),參照其他網(wǎng)絡(luò)編程的相關(guān)知識等,自定義一個(gè)拓展能力較強(qiáng)的網(wǎng)絡(luò)爬蟲原型程序。選用適宜的數(shù)據(jù)庫抓取、保存數(shù)據(jù),并以多線程并發(fā)結(jié)構(gòu)為支撐,最大限度的提升了運(yùn)作成效。
[關(guān)鍵詞]Scrapy;網(wǎng)絡(luò)爬蟲;框架建設(shè);數(shù)據(jù)抓取
在上個(gè)世紀(jì)90年代網(wǎng)絡(luò)爬蟲逐漸發(fā)展,現(xiàn)如今其已經(jīng)滲透到人們網(wǎng)絡(luò)日常生活中的諸多方面。一個(gè)優(yōu)質(zhì)的爬蟲應(yīng)有爬取目標(biāo)確切、爬取過程高效、運(yùn)行快速、后期處理有效等。為使爬蟲富有以上特征,建設(shè)良好的架構(gòu)是重要基礎(chǔ),進(jìn)而促進(jìn)爬蟲快速辨識已訪問過的頁面,更高效率的提取主觀所需的結(jié)構(gòu)與內(nèi)容。Scrapy框架的目的是為爬取網(wǎng)站內(nèi)容、精確提獲結(jié)構(gòu)性數(shù)據(jù),進(jìn)而編寫出的開源爬蟲應(yīng)用框架,本文主要探究其在網(wǎng)絡(luò)爬蟲達(dá)成及抓取數(shù)據(jù)方面的應(yīng)用情況。
1,設(shè)計(jì)整體架構(gòu)
從宏觀上,可以把爬蟲細(xì)化為如下三個(gè)模塊:(1)前置規(guī)則預(yù)設(shè)模塊:其功能是為程序正常運(yùn)作提前規(guī)劃將要提取的數(shù)據(jù)格式,有針對性的調(diào)換User-agentCookies登陸等數(shù)個(gè)監(jiān)測賬號;(2)網(wǎng)頁抓取模塊:該模塊從原始URL被定義之時(shí)便開始抓取網(wǎng)頁信息,初步提取并作基礎(chǔ)分析,結(jié)合反饋結(jié)果類型,調(diào)取相應(yīng)的回調(diào)函數(shù);(3)后續(xù)數(shù)據(jù)處理模塊:更進(jìn)一步解讀網(wǎng)頁抓取模塊的結(jié)果,判斷其合法性,并將其存管與數(shù)據(jù)庫內(nèi),或調(diào)整至Scheduler等待調(diào)整爬取。
2.爬蟲實(shí)現(xiàn)過程
本文選定“新浪微博”為爬蟲目標(biāo),“新浪微博”為國內(nèi)家喻戶曉的社交網(wǎng)站,選定其為爬取目標(biāo)對象,能協(xié)助我們接觸到更多新知識,感知大數(shù)據(jù)的發(fā)展趨向。
2.1前置規(guī)則預(yù)設(shè)模塊
清晰設(shè)定爬蟲爬取數(shù)據(jù)格式。具體是在item.py文件內(nèi),依照所要提取的字段規(guī)劃相對應(yīng)的類型,比如,Informationltem類被定義為爬取用戶信息,我們基于Field()法去闡釋數(shù)據(jù)字段(圖1)[1]。
2.1網(wǎng)頁抓取模塊
于Spiders.py內(nèi)設(shè)置該模塊的代碼,是項(xiàng)目的核心部分,于Spiders內(nèi)自定義SinaSpider類。本文如下詳細(xì)闡釋Spiders類的作用:
(1)name與host特性:定義該類名稱,這是爬蟲僅有的標(biāo)識。Host設(shè)定了爬蟲的爬取區(qū)域。
(2)start.urls特性:是一個(gè)原始URL列表,提供了爬蟲初始運(yùn)轉(zhuǎn)時(shí)的目標(biāo),爬蟲會(huì)將這些頁面設(shè)為始發(fā)點(diǎn),有針對性的抓取數(shù)據(jù),我們采用用戶ID將偏差、完整度較高的URL取代。而后采用start_requesets()方法促進(jìn)用戶ID與host地址有機(jī)整合過程,形成完整度較高的原始URL。
(3)Scrawl_ID、finish.ID均是Set類的變量:Python內(nèi)的set類和其他類型語言之間有較高的相似度,屬于一類無序性、不重復(fù)元素,基本功能是解除數(shù)次出現(xiàn)的元素。這里我們選用Set類變量去表示已爬取過的頁面與待調(diào)整的爬取頁面,取得的成效優(yōu)良[2]。
(4)請求處置部分:于SinaSpider內(nèi)自定義了start_requests()函數(shù)與四個(gè)回調(diào)函數(shù)。回調(diào)函數(shù)的作用是處置抓取用戶信息、微博內(nèi)容、粉絲以及關(guān)注的目標(biāo)對象。當(dāng)我們在回調(diào)函數(shù)內(nèi)設(shè)置一個(gè)request后,Scrapy將會(huì)自行調(diào)整,傳送該請求,并在該請求完成時(shí),調(diào)用注冊好的回調(diào)函數(shù)。cllback=self.parse代表的便是請求時(shí)使用parse作為回調(diào)函數(shù),根據(jù)parse函數(shù)中定義好的xpath路徑或獲取字符存儲至item字典,最終發(fā)送至Pipelines中進(jìn)行后期處理。
2.3后置數(shù)據(jù)處理模塊
基于Spider類,我們能順利捕獲爬取到目標(biāo)數(shù)據(jù),而后需要分析數(shù)據(jù)的存管問題。本文使用Mysq|數(shù)據(jù)庫進(jìn)行存儲,有效應(yīng)對爬取結(jié)果和數(shù)據(jù)庫兩者互相傳導(dǎo)的問題,是該模塊設(shè)計(jì)階段需重點(diǎn)分析的問題之一。Pipelines.py內(nèi)能進(jìn)行系列性的處理過程,我們可以把其視為數(shù)據(jù)流水線。Pipelines.py確定立了MysqlPipeline類,共計(jì)包括兩種方法,功能分別是初始化數(shù)據(jù)表、處置item并整合進(jìn)庫?;趐ymsql開源模塊和mysql構(gòu)建交互性關(guān)系。
開啟數(shù)據(jù)庫的本地銜接,進(jìn)而構(gòu)建“Sina”數(shù)據(jù)庫,而后制表與存儲相關(guān)信息。
若經(jīng)process_item()函數(shù)判別出字段數(shù)量符合要求且不為空,則將其整合至數(shù)據(jù)庫內(nèi),以上步驟落實(shí)后提示后續(xù)數(shù)據(jù)處置工作結(jié)束。
3.呈現(xiàn)于分析數(shù)據(jù)抓取結(jié)果
程序運(yùn)轉(zhuǎn)后便得到“Sina”數(shù)據(jù)庫,該數(shù)據(jù)庫下存有四張表格,本文主要分析Information表的設(shè)置情況(見表)[3]。
4.結(jié)束語
本文以Scrapy技術(shù)為支撐,形成了一個(gè)易于制作、易于拓展的聚焦式爬蟲、該爬蟲以“新浪微博”用戶為目標(biāo)對象,抓獲用戶群體的主要信息。實(shí)踐表明,采用Scrapy技術(shù)研發(fā)爬蟲,有效率高、過程便捷等優(yōu)勢,順利達(dá)成預(yù)期標(biāo)準(zhǔn)要求。
參考文獻(xiàn):
[1]朱麗英,吳錦晶.基于自動(dòng)化測試的定向網(wǎng)絡(luò)爬蟲的設(shè)計(jì)與實(shí)現(xiàn)[J].微型電腦應(yīng)用,2019,35(10):8-10.
[2]劉暉,石倩,基于網(wǎng)絡(luò)爬蟲的新聞網(wǎng)站自動(dòng)生成系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].電子技術(shù)與軟件工程,2019,20(13):18-19.
[3]邵曉文.多線程并發(fā)網(wǎng)絡(luò)爬蟲的設(shè)計(jì)與實(shí)現(xiàn)[J].現(xiàn)代計(jì)算機(jī)(專業(yè)版),2019,47(01):97-100.
作者簡介:
謝劍輝(1999-09-25)性別:男籍貫:廣東省梅州市人民族:漢族學(xué)歷:本科。