摘要:隨著互聯(lián)網(wǎng)技術(shù)發(fā)展,網(wǎng)絡(luò)所承載的數(shù)據(jù)逐漸體現(xiàn)其價(jià)值,且網(wǎng)絡(luò)數(shù)據(jù)體量日益倍增,對(duì)網(wǎng)絡(luò)數(shù)據(jù)的利用越來越受到各行各業(yè)的重視。該網(wǎng)絡(luò)爬蟲系統(tǒng)以基于Python語言的Scrapy網(wǎng)絡(luò)爬蟲框架技術(shù)為基礎(chǔ),綜合考慮對(duì)反爬機(jī)制的應(yīng)對(duì)措施及相關(guān)系統(tǒng)優(yōu)化,滿足一定的爬取效率要求,便于數(shù)據(jù)挖掘等數(shù)據(jù)研究利用。系統(tǒng)主要實(shí)現(xiàn)了實(shí)體管道模塊、爬蟲業(yè)務(wù)模塊、中間件模塊、Cookies池模塊。過程中涉及到的關(guān)鍵技術(shù)主要包括Cookies池服務(wù)、反爬蟲策略、頁(yè)面解析、Selenium+ChromeDriver實(shí)現(xiàn)模擬訪問、MongoDB實(shí)現(xiàn)數(shù)據(jù)持久化存儲(chǔ)等。
關(guān)鍵詞:爬蟲;Scrapy框架;Selenium+ChromeDriver;MongoDB
1.項(xiàng)目研究的背景及意義
隨著大數(shù)據(jù)發(fā)展戰(zhàn)略的逐步推進(jìn),打破信息孤島,合理整合利用數(shù)據(jù)信息成為信息融合技術(shù)的關(guān)鍵要素[1]。而及時(shí)掌握各種消息并對(duì)其進(jìn)行分析和處理具有重大社會(huì)意義。隨著國(guó)家持續(xù)推進(jìn)全國(guó)網(wǎng)絡(luò)安全和信息化建設(shè),互聯(lián)網(wǎng)信息技術(shù)不斷創(chuàng)新發(fā)展,經(jīng)濟(jì)數(shù)字化轉(zhuǎn)型已成大勢(shì)所趨[2]。隨著網(wǎng)絡(luò)效應(yīng)的不斷增強(qiáng),微博等用戶群體的不斷擴(kuò)大,其中某些平臺(tái)每天都會(huì)有過億的博文發(fā)送量及轉(zhuǎn)發(fā)量,在網(wǎng)絡(luò)數(shù)據(jù)產(chǎn)生和消費(fèi)中占到很大比例。
網(wǎng)絡(luò)爬蟲技術(shù)作為對(duì)網(wǎng)絡(luò)數(shù)據(jù)提取的基本技術(shù)在近些年隨網(wǎng)絡(luò)信息技術(shù)發(fā)展也不斷推陳出新,既是作為搜索引擎的基礎(chǔ)結(jié)構(gòu)推動(dòng)著互聯(lián)網(wǎng)網(wǎng)頁(yè)瀏覽訪問的基本進(jìn)程,又為新時(shí)代數(shù)據(jù)技術(shù)提供著多樣化的功能性應(yīng)用場(chǎng)景[3]。Python語言作為當(dāng)今流行語言之一,以廣泛的開源庫(kù)支持和語言特性與爬蟲系統(tǒng)開發(fā)有著很高的契合度[4]。
信息數(shù)據(jù)利用價(jià)值越來越重視,諸多門戶網(wǎng)站開始并逐步加強(qiáng)對(duì)可能的數(shù)據(jù)訪問行為進(jìn)行判斷和分析,對(duì)其中的非法訪問采取很多有效防范措施,因此在合法的應(yīng)用范圍內(nèi)相關(guān)網(wǎng)絡(luò)爬蟲需要遵循相應(yīng)的數(shù)據(jù)訪問方式,本文基于Scrapy網(wǎng)絡(luò)爬蟲框架、Python語言等相關(guān)技術(shù),并結(jié)合目前主流社交平臺(tái)研究、設(shè)計(jì)并開發(fā)了網(wǎng)絡(luò)爬蟲系統(tǒng),實(shí)現(xiàn)數(shù)據(jù)的爬取。
2.爬蟲的種類及爬取策略
根據(jù)所構(gòu)建的爬蟲系統(tǒng)所應(yīng)用的場(chǎng)景,常將爬蟲技術(shù)分為三類:通用爬蟲、聚焦爬蟲、增量式爬蟲。通用爬蟲通常應(yīng)用在搜索引擎系統(tǒng)中,聚焦爬蟲通常應(yīng)用于對(duì)特定人群提供主題信息服務(wù)的系統(tǒng)中,增量式爬蟲主要應(yīng)用于特定網(wǎng)站的數(shù)據(jù)持續(xù)獲取系統(tǒng)中。
主要的爬行策略有深度優(yōu)先爬行策略、廣度優(yōu)先爬行策略、大站優(yōu)先策略、反鏈策略、其他爬行策略等。除了以上這些策略,還有一些特定場(chǎng)景下比較適用的爬蟲策略如OPIC策略、PartialPageRank策略等[5]。
反爬機(jī)制指的是相關(guān)門戶網(wǎng)站為了防止網(wǎng)站重要數(shù)據(jù)的泄露或網(wǎng)站異常訪問造成不利影響,在網(wǎng)站設(shè)計(jì)時(shí)運(yùn)用一些策略或技術(shù)手段限制用戶訪問,通過對(duì)敏感行為的分析和控制來防止爬蟲工具對(duì)網(wǎng)站的異常訪問。
在爬取過程中需要充分考慮目標(biāo)網(wǎng)站的反爬機(jī)制,做到合理合法的獲取數(shù)據(jù)。
3.系統(tǒng)使用到的關(guān)鍵技術(shù)
URL去重可以以下集中策略來實(shí)現(xiàn)(1)數(shù)據(jù)庫(kù)去重,(2)集合去重,(3)基于集合的Hash優(yōu)化去重,(4)布隆過濾器。
網(wǎng)頁(yè)解析分為靜態(tài)頁(yè)面解析和動(dòng)態(tài)頁(yè)面解析。
數(shù)據(jù)庫(kù)采用MongoDB。數(shù)據(jù)存儲(chǔ)采用BSON格式來進(jìn)行以獲取更快的速度和更高的安全性。
網(wǎng)站登錄機(jī)制采用模擬登錄方法來進(jìn)行。
4.需求分析及系統(tǒng)實(shí)現(xiàn)
系統(tǒng)總體來看有如下幾點(diǎn)需求:(1)克服反爬機(jī)制,(2)實(shí)現(xiàn)爬蟲邏輯,(3)數(shù)據(jù)存儲(chǔ)。系統(tǒng)對(duì)硬件資源的需求主要取決于爬蟲系統(tǒng)的執(zhí)行效率要求,依據(jù)已有的相關(guān)爬蟲項(xiàng)目建設(shè)情況來看,實(shí)現(xiàn)單日萬級(jí)、十萬級(jí)、百萬級(jí)、千萬級(jí)爬取量所要求硬件條件逐漸提升。開發(fā)上充分考慮所需要的時(shí)間周期,為在有效期限內(nèi)完成項(xiàng)目的有效成品,本系統(tǒng)采用增量式開發(fā),在項(xiàng)目初期完成基本業(yè)務(wù)邏輯實(shí)現(xiàn)系統(tǒng)基本功能,而后通過擴(kuò)展接口不斷提高系統(tǒng)執(zhí)行效率和擴(kuò)展功能。
本系統(tǒng)的非功能性需求主要體現(xiàn)在運(yùn)行使用的穩(wěn)定性和擴(kuò)展性等方面。例如:執(zhí)行效率、可靠性、可擴(kuò)展性等。
作為單機(jī)應(yīng)用系統(tǒng)開發(fā),項(xiàng)目采用分層架構(gòu),結(jié)合Scrapy框架技術(shù)在具體系統(tǒng)分層上有五個(gè)層次,系統(tǒng)架構(gòu)如圖1所示。
在軟件程序設(shè)計(jì)方面所要實(shí)現(xiàn)的具體的功能模塊主要在中間件層、業(yè)務(wù)邏輯層與管道層。
對(duì)于本系統(tǒng)所爬取的數(shù)據(jù),常常是半結(jié)構(gòu)型數(shù)據(jù),用傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)存儲(chǔ)一方面會(huì)對(duì)系統(tǒng)執(zhí)行效率有較大影響,另一方面也不利于數(shù)據(jù)的后續(xù)使用,因此本系統(tǒng)采用基于NoSQL查詢語句的MongoDB數(shù)據(jù)庫(kù)。
5.總結(jié)與展望
本系統(tǒng)以基于Python語言的Scrapy網(wǎng)絡(luò)爬蟲框架為基礎(chǔ),利用Selenium + Chrome模擬登陸、頁(yè)面解析技術(shù)、UA偽裝、MongoDB等技術(shù),具體實(shí)現(xiàn)了實(shí)體管道、爬蟲、中間件、服務(wù)池等模塊,完成了對(duì)用戶信息、用戶關(guān)系、用戶發(fā)表信息等數(shù)據(jù)的爬取和持久化存儲(chǔ)。
系統(tǒng)不足之處:在實(shí)現(xiàn)上系統(tǒng)采用了單機(jī)架構(gòu),數(shù)據(jù)爬取效率在一定程度上受到了限制。
參考文獻(xiàn):
[1]KEVIN.網(wǎng)絡(luò)爬蟲技術(shù)原理[J].計(jì)算機(jī)與網(wǎng)絡(luò),2018,44(10).
[2]高宇,楊小兵.基于聚焦型網(wǎng)絡(luò)爬蟲的影評(píng)獲取技術(shù)[J].中國(guó)計(jì)量大學(xué)學(xué)報(bào),2018,29(3).
[3][美]瑞安·米切爾(RyanMitchell).Python網(wǎng)絡(luò)爬蟲權(quán)威指南第2版.人民郵電出版社,2019.
[4]楊建.分布式網(wǎng)絡(luò)爬蟲技術(shù)及對(duì)其安全防御研究[J].網(wǎng)絡(luò)安全技術(shù)與用,2018(04):6-7
[5]汪兵.基于Scrapy框架的分布式爬蟲系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[D].合肥工業(yè)大學(xué),2019.
基金項(xiàng)目:2017年度河南省高等學(xué)校青年骨干教師培養(yǎng)計(jì)劃項(xiàng)目“基于XSLT和STACS的高校云智慧校園建設(shè)研究”(項(xiàng)目編號(hào):2017GGJS292)。
作者簡(jiǎn)介:呂定輝(1980-),男,碩士研究生/講師,研究方向:計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)。