吳道君
(廣東嶺南職業(yè)技術(shù)學(xué)院,廣東 廣州 510663)
在計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)的不斷發(fā)展下,海量數(shù)據(jù)不斷涌現(xiàn),給人們的生活和工作造成了很大的不便,此時(shí),人們要想從海量數(shù)據(jù)中找到有價(jià)值的信息數(shù)據(jù),必須要頻繁手動(dòng)操作,才能找到需要的信息數(shù)據(jù),而python 網(wǎng)絡(luò)爬蟲框架的設(shè)計(jì)和使用的出現(xiàn)和應(yīng)用可以很好地解決這一問(wèn)題,不僅模仿人的手動(dòng)操作行為,快速查找數(shù)據(jù),還能縮短信息搜索時(shí)間,為進(jìn)一步提高人們的查找信息數(shù)據(jù)的效率和效果打下堅(jiān)實(shí)的基礎(chǔ)。因此,在大數(shù)據(jù)時(shí)代背景下,如何將python 科學(xué)應(yīng)用于網(wǎng)絡(luò)爬蟲框架中是相關(guān)人員必須思考和解決的問(wèn)題。
網(wǎng)絡(luò)爬蟲作為一種常用的腳本,在具體的運(yùn)用中,需要按照一定的規(guī)則,完成對(duì)互聯(lián)網(wǎng)信息的智能化抓取,因此,網(wǎng)絡(luò)爬蟲被廣泛地應(yīng)用于互聯(lián)網(wǎng)搜索引擎中,為幫助用戶快速獲取最新網(wǎng)站內(nèi)容產(chǎn)生積極的影響。此外,通過(guò)利用網(wǎng)絡(luò)爬蟲,一旦識(shí)別到用戶需要訪問(wèn)的頁(yè)面內(nèi)容,系統(tǒng)可以自動(dòng)向服務(wù)器發(fā)送頁(yè)面請(qǐng)求,從而將相應(yīng)的頁(yè)面內(nèi)容呈現(xiàn)在用戶面前,為提高網(wǎng)站搜索引擎處理效率和效果,滿足用戶的使用需求創(chuàng)造良好的條件。
通過(guò)使用python 語(yǔ)言,編寫網(wǎng)絡(luò)爬蟲具有以下優(yōu)勢(shì):(1)python 語(yǔ)言簡(jiǎn)單易學(xué),降低了開(kāi)發(fā)難度,省略了IDE 的使用,極大地提高了開(kāi)發(fā)效率和效果。(2)僅僅使用文本編輯器,就可以完成對(duì)多種中小型應(yīng)用的設(shè)計(jì)和開(kāi)發(fā),同時(shí),還能借助網(wǎng)絡(luò)爬蟲框架,實(shí)現(xiàn)對(duì)網(wǎng)站信息數(shù)據(jù)的深入分析、挖掘和存儲(chǔ),以達(dá)到科學(xué)處理相關(guān)信息數(shù)據(jù)的目的。(3)python 語(yǔ)言含有功能強(qiáng)大的HTML 解析器和網(wǎng)絡(luò)支持庫(kù),通過(guò)利用HTML 解析器,可以實(shí)現(xiàn)對(duì)各個(gè)網(wǎng)頁(yè)標(biāo)簽內(nèi)容的快速解析,便于用戶高效、快捷地抓取網(wǎng)頁(yè)內(nèi)容;通過(guò)借助網(wǎng)絡(luò)支持庫(kù),可以編寫較少的代碼實(shí)現(xiàn)對(duì)相關(guān)應(yīng)用程序的開(kāi)發(fā)。
待抓取URL 隊(duì)列作為網(wǎng)絡(luò)爬蟲框架的重要組成部分,URL 排列順序是否合理直接影響了網(wǎng)頁(yè)抓手順序,而網(wǎng)絡(luò)爬取策略的應(yīng)用可以科學(xué)地確定URL 排列順序。網(wǎng)絡(luò)爬取策略主要包含以下三種類型:(1)深度優(yōu)先排序。該排序方式在具體的運(yùn)用中,需要從根節(jié)點(diǎn)入手,實(shí)現(xiàn)對(duì)葉子節(jié)點(diǎn)的快速尋找。在處理網(wǎng)頁(yè)期間,通過(guò)選擇合適的超鏈接,可以實(shí)現(xiàn)對(duì)網(wǎng)頁(yè)內(nèi)容的深度優(yōu)先搜索。(2)最佳優(yōu)先排序。該排序方式在具體的運(yùn)用中,需要精確計(jì)算URL 描述文本、主題相關(guān)性以及網(wǎng)頁(yè)相似度,并對(duì)最終的計(jì)算結(jié)果進(jìn)行抓取。(3)廣度優(yōu)先排序。該排序方式在具體的運(yùn)用中,同樣需要從根節(jié)點(diǎn)入手,采用逐一遍歷的方式,對(duì)當(dāng)前層次網(wǎng)頁(yè)內(nèi)容進(jìn)行全面搜索,為下一層次網(wǎng)頁(yè)內(nèi)容的高效搜索提供重要的依據(jù)和參考。
2.1.1 模型分析
模型分析作為網(wǎng)絡(luò)爬蟲框架設(shè)計(jì)的首要環(huán)節(jié),其分析效果直接影響了網(wǎng)絡(luò)爬蟲框架的設(shè)計(jì)水平,因此,相關(guān)人員要做好對(duì)模型的科學(xué)分析。首先,要構(gòu)建URL 任務(wù)列表,獲取合適的爬取URL 地址,同時(shí),當(dāng)URL 任務(wù)列表構(gòu)建完成后,還要針對(duì)深度爬取網(wǎng)頁(yè)預(yù)先設(shè)定的內(nèi)容,對(duì)各個(gè)網(wǎng)頁(yè)進(jìn)行抓取處理,然后,從各個(gè)頁(yè)面中獲取新的URL 地址,并對(duì)這些地址存放是隊(duì)列中,當(dāng)符合終止條件時(shí),可以對(duì)URL 重復(fù)情況進(jìn)行判斷和分析,在此基礎(chǔ)上,根據(jù)已經(jīng)設(shè)定好的微博內(nèi)容,完成對(duì)各個(gè)頁(yè)面的精確搜索,然后,科學(xué)、全面分析頁(yè)面,并從各個(gè)頁(yè)面信息中提取和整理用戶需要的URL 地址,最后,將所獲得的URL 地址返回到指定的任務(wù)列表中,為實(shí)現(xiàn)重新爬取,提高網(wǎng)絡(luò)爬蟲運(yùn)行效率和效果打下堅(jiān)實(shí)的基礎(chǔ)。
2.1.2 總體框架設(shè)計(jì)

圖1 網(wǎng)絡(luò)爬蟲框架設(shè)計(jì)示意圖

圖2 爬蟲程序流程圖
網(wǎng)絡(luò)爬蟲框架設(shè)計(jì)示意圖如圖1 所示。從圖中可以看出,該框架主要包含以下三個(gè)層次:(1)用戶交互層。用戶交互層主要由兩個(gè)子頁(yè)面組成,一個(gè)是爬蟲配置子頁(yè)面,另一個(gè)是爬蟲管理子頁(yè)面,通過(guò)應(yīng)用這兩個(gè)頁(yè)面,可以提高用戶交互效果。其中,爬蟲配置子頁(yè)面主要負(fù)責(zé)對(duì)用戶所提交請(qǐng)求的接收和處理,為保證后期消息預(yù)處理模塊的科學(xué)解析打下堅(jiān)實(shí)的基礎(chǔ)。此外,在整個(gè)集群中,爬蟲啟動(dòng)操作或者暫停操作[1],均可以借助爬蟲管理子頁(yè)面,實(shí)現(xiàn)對(duì)各個(gè)節(jié)點(diǎn)上爬蟲的實(shí)時(shí)監(jiān)控。(2)消息處理層。消息處理層主用負(fù)責(zé)對(duì)頁(yè)面所傳遞請(qǐng)求消息的驗(yàn)證和處理,實(shí)現(xiàn)對(duì)海量信息數(shù)據(jù)的高效處理,以達(dá)到有效滿足大規(guī)模業(yè)務(wù)需求,系統(tǒng)內(nèi)部緩存器在具體的設(shè)計(jì)中,主要使用了Kafka.為保證數(shù)據(jù)流處理性能,縮短數(shù)據(jù)流處理時(shí)間打下堅(jiān)實(shí)的基礎(chǔ)。(3)業(yè)務(wù)邏輯層。業(yè)務(wù)邏輯層作為整個(gè)系統(tǒng)的核心和關(guān)鍵,主要由若干個(gè)節(jié)點(diǎn)構(gòu)成。各種爬蟲節(jié)點(diǎn)采用任務(wù)調(diào)度的方式,實(shí)現(xiàn)對(duì)各個(gè)結(jié)構(gòu)的統(tǒng)一管理,提高了任務(wù)調(diào)度的效率和效果[2],為實(shí)時(shí)檢測(cè)和掌握爬蟲節(jié)點(diǎn)運(yùn)行狀態(tài),取得最佳調(diào)度效果創(chuàng)造良好的條件。主節(jié)點(diǎn)所執(zhí)行的爬蟲任務(wù)隊(duì)列主要包含以下兩種:一種是總爬蟲,另一種是節(jié)點(diǎn)。其中,總爬蟲主要負(fù)責(zé)對(duì)頁(yè)面請(qǐng)求消息以及爬蟲新抓取任務(wù)的集中存儲(chǔ),使其安全、可靠地存儲(chǔ)于任務(wù)隊(duì)列中;各爬蟲節(jié)點(diǎn)主要負(fù)責(zé)對(duì)待抓取爬蟲任務(wù)的存放。對(duì)于待抓取爬蟲而言,所選用的存放位置主要以內(nèi)存型數(shù)據(jù)庫(kù)為主[3],為實(shí)現(xiàn)對(duì)爬蟲任務(wù)的快速獲取和提交發(fā)揮出重要作用。
2.1.3 程序流程設(shè)計(jì)
對(duì)于網(wǎng)絡(luò)爬蟲框架而言,在python 的應(yīng)用背景下,需要加強(qiáng)對(duì)爬蟲程序流程的科學(xué)設(shè)計(jì),為開(kāi)發(fā)出一款功能強(qiáng)大、實(shí)用性強(qiáng)的網(wǎng)絡(luò)爬蟲系統(tǒng)打下堅(jiān)實(shí)的基礎(chǔ)。爬蟲程序流程圖如圖2所示。
為了將python 科學(xué)應(yīng)用于網(wǎng)絡(luò)爬蟲框架中,保證網(wǎng)絡(luò)爬蟲框架實(shí)現(xiàn)效果[4],相關(guān)人員要除了要做好對(duì)目標(biāo)網(wǎng)站URL 的設(shè)置外,還要重視對(duì)爬取模塊、偽裝time 模塊、數(shù)據(jù)處理模塊的實(shí)現(xiàn),為保證用戶搜索信息的高效性,滿足用戶查詢有效信息的需求產(chǎn)生積極的影響。
2.2.1 目標(biāo)網(wǎng)站URL
網(wǎng)頁(yè)端新浪微博所選用的反爬蟲手段比較先進(jìn),為了降低爬蟲手段的實(shí)施難度,需要將目標(biāo)網(wǎng)站地址設(shè)置為:https://m.weibo.cn/。此外,為了確保用戶在最短時(shí)間內(nèi)快速查找到有價(jià)值的信息,相關(guān)人員需要將目標(biāo)網(wǎng)站URL 設(shè)置為程序讀取內(nèi)容,只有這樣,才能充分發(fā)揮和利用python 優(yōu)勢(shì),降低網(wǎng)絡(luò)爬蟲框架開(kāi)發(fā)難度,為準(zhǔn)確、高效地抓取信息打下堅(jiān)實(shí)的基礎(chǔ),最后,還要將制定的網(wǎng)站URL 更改為微博ID 爬取地址,以滿足抓取微博評(píng)論信息的需求。
2.2.2 爬取模塊
爬取模塊作為網(wǎng)絡(luò)爬蟲框架的核心模塊,在具體的開(kāi)發(fā)和實(shí)現(xiàn)中,需要借助python 語(yǔ)言,采用urllib 編寫的方式,利用HTTP 庫(kù)開(kāi)發(fā)模式,完成對(duì)簡(jiǎn)潔頁(yè)面的開(kāi)發(fā)[5],以達(dá)到縮小開(kāi)發(fā)時(shí)間的目的。此外,該模塊在整個(gè)開(kāi)發(fā)過(guò)程中,需要用到兩種請(qǐng)求方式:一種是get 請(qǐng)求方式,另一種是post 請(qǐng)求方式,其中,get請(qǐng)求方式主要負(fù)責(zé)將用戶訪問(wèn)請(qǐng)求傳遞給用戶需要訪問(wèn)的微博URL 地址中;post 請(qǐng)求方式主要負(fù)責(zé)將post 請(qǐng)求發(fā)送給HTML 頁(yè)面。
2.2.3 偽裝time 模塊
偽裝time 模塊在具體的開(kāi)發(fā)和實(shí)現(xiàn)中,為了實(shí)現(xiàn)對(duì)網(wǎng)站信息的保護(hù),需要借助網(wǎng)站的爬蟲功能,采用IP 封禁的方式,將爬蟲程序進(jìn)行封禁處理,同時(shí),還要將所有訪問(wèn)地址偽裝設(shè)置為瀏覽器形式,便于用戶數(shù)的操作,此外,還要加強(qiáng)對(duì)時(shí)間限制方式的設(shè)置,以確保用戶能夠快速、精確地訪問(wèn)需要的爬取數(shù)據(jù)網(wǎng)站,避免系統(tǒng)因抓取程序[6],出現(xiàn)屏蔽IP 現(xiàn)象。偽裝time 模塊在傳遞響應(yīng)參數(shù)期間,重點(diǎn)使用了time·sleep()方法。對(duì)于網(wǎng)絡(luò)爬蟲框架而言,其偽裝time 模塊功能主要是根據(jù)用戶的使用需求,對(duì)爬蟲程序訪問(wèn)相關(guān)參數(shù)進(jìn)行設(shè)置,以達(dá)到科學(xué)控制和調(diào)整訪問(wèn)網(wǎng)站時(shí)間間隔的目的。最后,還要通過(guò)全面提取和整理微博評(píng)論詳細(xì)時(shí)間,為后期優(yōu)化微博功能提供重要的依據(jù)和參考。
2.2.4 數(shù)據(jù)處理模塊
數(shù)據(jù)處理模塊主要借助python 語(yǔ)言,對(duì)數(shù)據(jù)進(jìn)行導(dǎo)入、整理處理,為實(shí)現(xiàn)對(duì)數(shù)據(jù)深入分析和挖掘,保證數(shù)據(jù)的處理效果打下堅(jiān)實(shí)的基礎(chǔ)。此外,在python 語(yǔ)言的應(yīng)用背景下,相關(guān)人員好藥采用構(gòu)建numpt 數(shù)組的方式,不斷優(yōu)化和完善數(shù)據(jù)預(yù)處理、數(shù)據(jù)分析和解析過(guò)程,為進(jìn)一步提高數(shù)據(jù)處理產(chǎn)生積極的影響產(chǎn)生積極的影響。此外,通過(guò)利用python 語(yǔ)言,可以時(shí)對(duì)處理表格、以及重要數(shù)據(jù)的科學(xué)設(shè)計(jì)[7],為實(shí)現(xiàn)對(duì)數(shù)組數(shù)據(jù)的統(tǒng)一化處理發(fā)揮出重要作用,例如:在對(duì)新浪微博評(píng)論進(jìn)行設(shè)計(jì)期間,需要借助numpy,完成對(duì)多種類型數(shù)據(jù)的處理,pandas 數(shù)組主要包含以下三種類型,分別是以為數(shù)組、二維數(shù)組和三維數(shù)組。其中一維數(shù)組和二維數(shù)組使用范圍相對(duì)比較廣泛,一維數(shù)組作為一種常用的數(shù)組,攜帶大量的標(biāo)簽,將整數(shù)、浮點(diǎn)數(shù)、字符串等所有數(shù)據(jù)類型包含在內(nèi),一維數(shù)組采用標(biāo)簽定位的方式,可以實(shí)現(xiàn)對(duì)多種數(shù)據(jù)類型的查找和利用[8]。二維數(shù)組作為一種常用的二維數(shù)據(jù)結(jié)構(gòu),內(nèi)部含有大量的標(biāo)簽,為完成對(duì)各種數(shù)據(jù)類型的定位,保證網(wǎng)絡(luò)爬蟲框架實(shí)現(xiàn)效果提供有力的保障
綜上所述,在大數(shù)據(jù)時(shí)代背景下,通過(guò)將python 應(yīng)用于網(wǎng)絡(luò)爬蟲框架中,不僅可以快速提取多種類型的信息數(shù)據(jù),還能有效地分析和挖掘大量的有價(jià)值的信息數(shù)據(jù),為人們查找有用信息數(shù)據(jù)提供極大的便利。此外,python 語(yǔ)言適用范圍廣,功能多樣強(qiáng)大,為多種類型的軟件工具包提供重要的技術(shù)支持。另外,python 語(yǔ)言還可以快速提取Web 信息數(shù)據(jù),很好地滿足了人們高效搜索信息數(shù)據(jù)的需求。