摘? 要:隨著大數(shù)據(jù)與人工智能時(shí)代的來(lái)臨,有效地獲取和利用信息成為了一項(xiàng)挑戰(zhàn),從而使網(wǎng)絡(luò)爬蟲(chóng)越來(lái)越受到人們的重視與青睞。Python以其簡(jiǎn)單和強(qiáng)大的功能在網(wǎng)絡(luò)爬蟲(chóng)方向脫穎而出。本文將介紹有關(guān)Python網(wǎng)絡(luò)爬蟲(chóng)的相關(guān)知識(shí),同時(shí)實(shí)現(xiàn)一次爬取豆瓣影評(píng)評(píng)論,并運(yùn)用可視化庫(kù)生成詞云,并對(duì)其進(jìn)行分析。
關(guān)鍵詞:網(wǎng)絡(luò)爬蟲(chóng);Python;可視化
中圖分類號(hào):TP393.092;TP391.3? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):2096-4706(2019)20-0026-03
Abstract:With the advent of the era of big data and artificial intelligence,how to effectively acquire and utilize information has become a challenge,and online crawlers have become more and more popular and favored by people. Python stands out in the direction of web crawlers with its simple and powerful features. This article will introduce you to the Python web crawler and implement a crawling Douban review commentary and use the visual library to generate a word cloud to analyze it.
Keywords:web crawler;Python;visualization
0? 引? 言
網(wǎng)絡(luò)爬蟲(chóng)是一種“古老”的網(wǎng)絡(luò)技術(shù),它伴隨著互聯(lián)網(wǎng)的發(fā)展而不斷演化,隨著大數(shù)據(jù)時(shí)代的來(lái)臨,爬蟲(chóng)技術(shù)又迎來(lái)了新一波的振興浪潮。在大數(shù)據(jù)架構(gòu)中,數(shù)據(jù)的收集與存儲(chǔ)占據(jù)著極為重要的核心位置,而爬蟲(chóng)技術(shù)也在這兩項(xiàng)技術(shù)層次中占據(jù)極為重要的位置。爬蟲(chóng)是請(qǐng)求網(wǎng)站并提取數(shù)據(jù)的自動(dòng)化程序。請(qǐng)求、提取與自動(dòng)化變成了爬蟲(chóng)的關(guān)鍵。本文將介紹網(wǎng)絡(luò)爬蟲(chóng)及其應(yīng)用,以及Python的網(wǎng)絡(luò)爬蟲(chóng)實(shí)現(xiàn)。
1? 網(wǎng)絡(luò)爬蟲(chóng)及其應(yīng)用
網(wǎng)絡(luò)爬蟲(chóng),又稱為網(wǎng)絡(luò)機(jī)器人或者網(wǎng)頁(yè)蜘蛛,是一種按照一定規(guī)則自動(dòng)抓取萬(wàn)維網(wǎng)信息的程序或者腳本。網(wǎng)絡(luò)爬蟲(chóng)大致可以分為通用網(wǎng)絡(luò)爬蟲(chóng)、聚焦網(wǎng)絡(luò)爬蟲(chóng)、增量式網(wǎng)絡(luò)爬蟲(chóng)以及深層網(wǎng)絡(luò)爬蟲(chóng)等類型。在實(shí)際的網(wǎng)絡(luò)爬蟲(chóng)系統(tǒng)中,通常是結(jié)合了幾種爬蟲(chóng)技術(shù)實(shí)現(xiàn)的。
通用型網(wǎng)絡(luò)爬蟲(chóng)的典型的應(yīng)用便是搜索引擎,例如百度、谷歌等,但是該類爬蟲(chóng)存在許多弊端。例如,不同的用戶對(duì)于檢索具有不同的需求和目的,而通用搜索引擎返回的結(jié)果包含大量無(wú)用的網(wǎng)頁(yè);再如,由于圖片、音頻、視頻等多媒體數(shù)據(jù)的不斷涌現(xiàn),通用搜索引擎不能很好地發(fā)現(xiàn)和獲取信息等等。為了解決以上弊端,聚焦爬蟲(chóng)應(yīng)運(yùn)而生,它根據(jù)既定的抓取目標(biāo)對(duì)萬(wàn)維網(wǎng)上的相關(guān)網(wǎng)頁(yè)與鏈接進(jìn)行有選擇的訪問(wèn),并獲取所需信息。增量式爬蟲(chóng)是指對(duì)已下載網(wǎng)頁(yè)采取增量式更新,對(duì)于沒(méi)有變化的網(wǎng)頁(yè)并不重新下載,大大減少了下載量,也減少了時(shí)間與空間的浪費(fèi),但同時(shí)增加了算法和實(shí)現(xiàn)的復(fù)雜度。對(duì)于Web頁(yè)面,其存在方式有表層和深層網(wǎng)頁(yè),深層網(wǎng)頁(yè)不能僅僅通過(guò)靜態(tài)網(wǎng)頁(yè)鏈接獲取,其數(shù)據(jù)隱藏在表單之后,只有通過(guò)用戶提交相關(guān)必要關(guān)鍵詞才能獲取,因此需要深層網(wǎng)絡(luò)爬蟲(chóng)技術(shù)的支持。
以通用網(wǎng)絡(luò)爬蟲(chóng)為例,網(wǎng)絡(luò)爬蟲(chóng)基本工作流程為:選取種子URL(可以由用戶人為指定,也可以由用戶指定的某幾個(gè)初始爬取網(wǎng)頁(yè)決定);將其放入待抓取URL隊(duì)列;讀取URL;解析DNS;得到主機(jī)IP;下載對(duì)應(yīng)網(wǎng)頁(yè);存儲(chǔ)網(wǎng)頁(yè);分析已抓取的URL,并從中分析出其他鏈接的URL,同時(shí)比較去重;將去重后的URL再次放入到待抓取URL隊(duì)列,進(jìn)入下一次循環(huán)。通用網(wǎng)絡(luò)爬蟲(chóng)結(jié)構(gòu)流程如圖1所示。
2? Python實(shí)現(xiàn)網(wǎng)絡(luò)爬蟲(chóng)
開(kāi)發(fā)網(wǎng)絡(luò)爬蟲(chóng)的語(yǔ)言有很多,常見(jiàn)的開(kāi)發(fā)語(yǔ)言有Python、Java、PHP、Node.JS、C++以及Go等語(yǔ)言。本文主要闡述基于Python的網(wǎng)絡(luò)爬蟲(chóng),Python語(yǔ)言的特點(diǎn)是簡(jiǎn)單易學(xué)、代碼簡(jiǎn)潔并且框架非常豐富,同時(shí)Python之所以強(qiáng)大并能夠在網(wǎng)絡(luò)爬蟲(chóng)中占據(jù)一席之地,與其強(qiáng)大的第三方庫(kù)是分不開(kāi)的。Python為爬蟲(chóng)提供了豐富的第三方庫(kù),其中較為常用的Python中爬蟲(chóng)三大庫(kù),即Requests庫(kù)、Beautiful Soup庫(kù)以及l(fā)xml庫(kù)。根據(jù)實(shí)際需求可選用相應(yīng)爬蟲(chóng)庫(kù)進(jìn)行實(shí)現(xiàn)。Python實(shí)現(xiàn)網(wǎng)絡(luò)爬蟲(chóng)的基本流程如圖2所示。
(1)發(fā)送請(qǐng)求:即發(fā)送一個(gè)Request;
(2)獲取相應(yīng)內(nèi)容:即得到Response;
(3)解析內(nèi)容:對(duì)于HTML數(shù)據(jù)使用re模塊或第三方庫(kù)等;
(4)保存數(shù)據(jù):數(shù)據(jù)庫(kù)或者文件中保存。
網(wǎng)絡(luò)連接其需要計(jì)算機(jī)與服務(wù)器端的各一次的Request請(qǐng)求和Response回應(yīng)。同理,爬蟲(chóng)也需要這個(gè)過(guò)程,即模擬計(jì)算機(jī)向服務(wù)器段發(fā)起Request請(qǐng)求和接收服務(wù)器端返回的Response內(nèi)容并對(duì)其進(jìn)行解析,從而提取所需要的信息。在網(wǎng)絡(luò)爬蟲(chóng)的爬取過(guò)程中,比如聚焦網(wǎng)絡(luò)爬蟲(chóng)中,爬取網(wǎng)頁(yè)的順序尤其重要,而爬取的順序一般由爬取策略來(lái)決定。爬行策略有很多種,包括廣度優(yōu)先爬行策略、深度優(yōu)先爬行策略、大站優(yōu)先爬行策略(按照對(duì)應(yīng)的網(wǎng)頁(yè)所屬的站點(diǎn)進(jìn)行分類,網(wǎng)頁(yè)數(shù)量多的站點(diǎn)稱為大站,即網(wǎng)頁(yè)越多的優(yōu)先爬?。?、反鏈爬行策略(反向鏈接的網(wǎng)頁(yè)數(shù)越多的優(yōu)先爬?。┮约癘PIC策略、Partial策略和PageRank策略等爬行策略。本文將以基于Python循環(huán)抓取豆瓣影評(píng)中所有觀眾的評(píng)論,將其存儲(chǔ)在文本文件中,并以運(yùn)用可視化庫(kù)詞云制作詞語(yǔ)圖為例,詳細(xì)介紹基于Python的網(wǎng)絡(luò)爬蟲(chóng)過(guò)程。
2.1? 內(nèi)容簡(jiǎn)介
(1)目標(biāo)網(wǎng)站:本文目標(biāo)為抓取豆瓣影評(píng)中所有觀眾的評(píng)論,將其存儲(chǔ)在文本文件中,并運(yùn)用可視化庫(kù)詞云制作詞語(yǔ)圖,其目標(biāo)網(wǎng)站為https://movie.douban.com/subject/27195020/comments?start=;
(2)使用軟件:本文采用Python語(yǔ)言來(lái)實(shí)現(xiàn)目標(biāo)網(wǎng)站的網(wǎng)絡(luò)爬取過(guò)程,Python開(kāi)發(fā)的軟件有很多,包括最為常用的IDE為PyCharm,以及文本編輯器Sublime Text,由于代碼相對(duì)簡(jiǎn)單,本文采用的軟件為Sublime Text;
(3)Python版本:目前,Python版本分為兩種,Python 2版本和Python 3.x版本,目前Python 2版本的所有項(xiàng)目都將向Python 3.x遷移,并且Python 2版本已經(jīng)停止更新和支持,故本文采用Python版本為Python 3.6;
(4)涉及Python類庫(kù):上文已經(jīng)提到過(guò),Python網(wǎng)絡(luò)爬蟲(chóng)依賴于其強(qiáng)大的第三方庫(kù)的支持,包括Requests、Beautiful Soup和lxml等,本文同時(shí)用到的第三方爬蟲(chóng)庫(kù)有Requests和lxml。除以上爬蟲(chóng)相關(guān)的第三方庫(kù)外,本文還用到wordcloud,該庫(kù)用于制作可視化詞云,Numpy庫(kù)用于對(duì)爬取到數(shù)據(jù)進(jìn)行數(shù)據(jù)分析,PIL庫(kù)用于圖像處理,以及jieba庫(kù)用于自然語(yǔ)言的分詞處理。
2.2? 實(shí)現(xiàn)思路
抓取豆瓣影評(píng)中所有觀眾的評(píng)論,將其存儲(chǔ)在文本文件中,并運(yùn)用可視化庫(kù)詞云制作詞語(yǔ)圖,根據(jù)其目標(biāo)要求以及爬蟲(chóng)基本流程,設(shè)計(jì)以下實(shí)現(xiàn)思路:
(1)安裝并導(dǎo)入相應(yīng)類庫(kù):使用pip命令安裝相應(yīng)第三方庫(kù),包括Requests、lxml、wordcloud、Numpy以及jieba,安裝后使用import導(dǎo)入所有用到的類庫(kù);
(2)確定網(wǎng)頁(yè):根據(jù)目標(biāo)網(wǎng)站來(lái)確定所要爬取的目標(biāo)網(wǎng)頁(yè);
(3)獲取請(qǐng)求頭:
headers={
"User-Agent":"Mozilla/5.0(Windows NT 10.0;WOW64)"
"AppleWebKit/537.36(KHTML,like Gecko)"
"Chrome/63.0.3239.132 Safari/537.36"
}
User-Agent字段是用來(lái)告知網(wǎng)站站長(zhǎng)爬蟲(chóng)自己的身份信息的,網(wǎng)站管理員可以通過(guò)爬蟲(chóng)告知的身份信息對(duì)爬蟲(chóng)的身份進(jìn)行識(shí)別,此為爬蟲(chóng)的身份識(shí)別過(guò)程。也有些爬蟲(chóng)可以偽裝成其他身份去進(jìn)行網(wǎng)站爬取,并以此來(lái)獲得額外的數(shù)據(jù)。雖然任意爬取在技術(shù)上可以實(shí)現(xiàn),但是并不提倡,因?yàn)楣餐瑺I(yíng)造一個(gè)良好的網(wǎng)絡(luò)環(huán)境,并遵守規(guī)則,才能實(shí)現(xiàn)爬方與服務(wù)方的共贏;
(4)解決反爬機(jī)制并循環(huán)獲取所有頁(yè)面;
(5)運(yùn)用XPath獲取短評(píng):XPath是xml的路徑語(yǔ)言,簡(jiǎn)而言之就是通過(guò)元素的路徑來(lái)查找到這個(gè)標(biāo)簽元素;
(6)存入txt文檔:將爬取到的所有信息保存到txt文檔中;
(7)對(duì)文檔短評(píng)進(jìn)行分詞:使用jieba庫(kù),對(duì)保存下來(lái)的短評(píng)txt文檔進(jìn)行分詞,分詞后,在單獨(dú)個(gè)體之間添加空格;
(8)制作并生成詞云:通過(guò)wordcloud庫(kù)進(jìn)行詞云的制作,選好詞云形狀圖片,設(shè)置詞云字體,剔除如“真的”“什么”“但是”“而且”“那么”等無(wú)關(guān)字。設(shè)置詞云背景色等,最終制作并生成詞云可視化圖片。
根據(jù)以上實(shí)現(xiàn)思路,使用Python完成代碼編寫(xiě),其部分實(shí)現(xiàn)核心代碼如圖3所示。
2.3? 運(yùn)行結(jié)果
通過(guò)對(duì)代碼的不斷調(diào)試與測(cè)試,最終實(shí)現(xiàn)了基于Python的網(wǎng)絡(luò)爬蟲(chóng)運(yùn)行程序,得到短評(píng)txt文檔,根據(jù)文檔內(nèi)容生成的詞云效果圖如圖4和圖5所示。
3? 結(jié)? 論
隨著大數(shù)據(jù)與人工智能時(shí)代的來(lái)臨,以及海量數(shù)據(jù)的不斷涌現(xiàn),快速準(zhǔn)確地獲取用戶想要的信息變得尤為迫切和重要,從而使得網(wǎng)絡(luò)爬蟲(chóng)技術(shù)的應(yīng)用日益增多,本文詳細(xì)介紹了網(wǎng)絡(luò)爬蟲(chóng)的相關(guān)分類及其應(yīng)用,同時(shí)著重闡述了基于Python的網(wǎng)絡(luò)爬蟲(chóng),描述了其爬蟲(chóng)原理及流程,最后本文通過(guò)基于Python的豆瓣影評(píng)的爬取并進(jìn)行存儲(chǔ),最終實(shí)現(xiàn)詞云可視化效果,同時(shí)詳細(xì)闡述了基于Python的網(wǎng)絡(luò)爬蟲(chóng)技術(shù)的實(shí)現(xiàn)細(xì)節(jié)及過(guò)程,效果良好。
參考文獻(xiàn):
[1] 常逢佳,李宗花,文靜,等.基于Python的招聘數(shù)據(jù)爬蟲(chóng)設(shè)計(jì)與實(shí)現(xiàn) [J/OL].軟件導(dǎo)刊:1-4.[2019-08-13].http://kns.cnki.net/kcms/detail/42.1671.TP.20190731.1013.042.html.
[2] 張露.網(wǎng)絡(luò)爬蟲(chóng)技術(shù)在大數(shù)據(jù)審計(jì)中的應(yīng)用 [J].合作經(jīng)濟(jì)與科技,2019(7):190-192.
[3] 李俊華.基于Python的數(shù)據(jù)分析 [J].電子技術(shù)與軟件工程,2018(17):167.
作者簡(jiǎn)介:李俊華(1988-),女,漢族,黑龍江哈爾濱人,講師,碩士研究生,研究方向:大數(shù)據(jù)、Python。