


摘? 要:隨著大數據與人工智能時代的來臨,有效地獲取和利用信息成為了一項挑戰,從而使網絡爬蟲越來越受到人們的重視與青睞。Python以其簡單和強大的功能在網絡爬蟲方向脫穎而出。本文將介紹有關Python網絡爬蟲的相關知識,同時實現一次爬取豆瓣影評評論,并運用可視化庫生成詞云,并對其進行分析。
關鍵詞:網絡爬蟲;Python;可視化
中圖分類號:TP393.092;TP391.3? ? ? 文獻標識碼:A 文章編號: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? 引? 言
網絡爬蟲是一種“古老”的網絡技術,它伴隨著互聯網的發展而不斷演化,隨著大數據時代的來臨,爬蟲技術又迎來了新一波的振興浪潮。在大數據架構中,數據的收集與存儲占據著極為重要的核心位置,而爬蟲技術也在這兩項技術層次中占據極為重要的位置。爬蟲是請求網站并提取數據的自動化程序。請求、提取與自動化變成了爬蟲的關鍵。本文將介紹網絡爬蟲及其應用,以及Python的網絡爬蟲實現。
1? 網絡爬蟲及其應用
網絡爬蟲,又稱為網絡機器人或者網頁蜘蛛,是一種按照一定規則自動抓取萬維網信息的程序或者腳本。網絡爬蟲大致可以分為通用網絡爬蟲、聚焦網絡爬蟲、增量式網絡爬蟲以及深層網絡爬蟲等類型。在實際的網絡爬蟲系統中,通常是結合了幾種爬蟲技術實現的。
通用型網絡爬蟲的典型的應用便是搜索引擎,例如百度、谷歌等,但是該類爬蟲存在許多弊端。例如,不同的用戶對于檢索具有不同的需求和目的,而通用搜索引擎返回的結果包含大量無用的網頁;再如,由于圖片、音頻、視頻等多媒體數據的不斷涌現,通用搜索引擎不能很好地發現和獲取信息等等。為了解決以上弊端,聚焦爬蟲應運而生,它根據既定的抓取目標對萬維網上的相關網頁與鏈接進行有選擇的訪問,并獲取所需信息。增量式爬蟲是指對已下載網頁采取增量式更新,對于沒有變化的網頁并不重新下載,大大減少了下載量,也減少了時間與空間的浪費,但同時增加了算法和實現的復雜度。對于Web頁面,其存在方式有表層和深層網頁,深層網頁不能僅僅通過靜態網頁鏈接獲取,其數據隱藏在表單之后,只有通過用戶提交相關必要關鍵詞才能獲取,因此需要深層網絡爬蟲技術的支持。
以通用網絡爬蟲為例,網絡爬蟲基本工作流程為:選取種子URL(可以由用戶人為指定,也可以由用戶指定的某幾個初始爬取網頁決定);將其放入待抓取URL隊列;讀取URL;解析DNS;得到主機IP;下載對應網頁;存儲網頁;分析已抓取的URL,并從中分析出其他鏈接的URL,同時比較去重;將去重后的URL再次放入到待抓取URL隊列,進入下一次循環。通用網絡爬蟲結構流程如圖1所示。
2? Python實現網絡爬蟲
開發網絡爬蟲的語言有很多,常見的開發語言有Python、Java、PHP、Node.JS、C++以及Go等語言。本文主要闡述基于Python的網絡爬蟲,Python語言的特點是簡單易學、代碼簡潔并且框架非常豐富,同時Python之所以強大并能夠在網絡爬蟲中占據一席之地,與其強大的第三方庫是分不開的。Python為爬蟲提供了豐富的第三方庫,其中較為常用的Python中爬蟲三大庫,即Requests庫、Beautiful Soup庫以及lxml庫。根據實際需求可選用相應爬蟲庫進行實現。Python實現網絡爬蟲的基本流程如圖2所示。
(1)發送請求:即發送一個Request;
(2)獲取相應內容:即得到Response;
(3)解析內容:對于HTML數據使用re模塊或第三方庫等;
(4)保存數據:數據庫或者文件中保存。
網絡連接其需要計算機與服務器端的各一次的Request請求和Response回應。同理,爬蟲也需要這個過程,即模擬計算機向服務器段發起Request請求和接收服務器端返回的Response內容并對其進行解析,從而提取所需要的信息。在網絡爬蟲的爬取過程中,比如聚焦網絡爬蟲中,爬取網頁的順序尤其重要,而爬取的順序一般由爬取策略來決定。爬行策略有很多種,包括廣度優先爬行策略、深度優先爬行策略、大站優先爬行策略(按照對應的網頁所屬的站點進行分類,網頁數量多的站點稱為大站,即網頁越多的優先爬?。?、反鏈爬行策略(反向鏈接的網頁數越多的優先爬取)以及OPIC策略、Partial策略和PageRank策略等爬行策略。本文將以基于Python循環抓取豆瓣影評中所有觀眾的評論,將其存儲在文本文件中,并以運用可視化庫詞云制作詞語圖為例,詳細介紹基于Python的網絡爬蟲過程。
2.1? 內容簡介
(1)目標網站:本文目標為抓取豆瓣影評中所有觀眾的評論,將其存儲在文本文件中,并運用可視化庫詞云制作詞語圖,其目標網站為https://movie.douban.com/subject/27195020/comments?start=;
(2)使用軟件:本文采用Python語言來實現目標網站的網絡爬取過程,Python開發的軟件有很多,包括最為常用的IDE為PyCharm,以及文本編輯器Sublime Text,由于代碼相對簡單,本文采用的軟件為Sublime Text;
(3)Python版本:目前,Python版本分為兩種,Python 2版本和Python 3.x版本,目前Python 2版本的所有項目都將向Python 3.x遷移,并且Python 2版本已經停止更新和支持,故本文采用Python版本為Python 3.6;
(4)涉及Python類庫:上文已經提到過,Python網絡爬蟲依賴于其強大的第三方庫的支持,包括Requests、Beautiful Soup和lxml等,本文同時用到的第三方爬蟲庫有Requests和lxml。除以上爬蟲相關的第三方庫外,本文還用到wordcloud,該庫用于制作可視化詞云,Numpy庫用于對爬取到數據進行數據分析,PIL庫用于圖像處理,以及jieba庫用于自然語言的分詞處理。
2.2? 實現思路
抓取豆瓣影評中所有觀眾的評論,將其存儲在文本文件中,并運用可視化庫詞云制作詞語圖,根據其目標要求以及爬蟲基本流程,設計以下實現思路:
(1)安裝并導入相應類庫:使用pip命令安裝相應第三方庫,包括Requests、lxml、wordcloud、Numpy以及jieba,安裝后使用import導入所有用到的類庫;
(2)確定網頁:根據目標網站來確定所要爬取的目標網頁;
(3)獲取請求頭:
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字段是用來告知網站站長爬蟲自己的身份信息的,網站管理員可以通過爬蟲告知的身份信息對爬蟲的身份進行識別,此為爬蟲的身份識別過程。也有些爬蟲可以偽裝成其他身份去進行網站爬取,并以此來獲得額外的數據。雖然任意爬取在技術上可以實現,但是并不提倡,因為共同營造一個良好的網絡環境,并遵守規則,才能實現爬方與服務方的共贏;
(4)解決反爬機制并循環獲取所有頁面;
(5)運用XPath獲取短評:XPath是xml的路徑語言,簡而言之就是通過元素的路徑來查找到這個標簽元素;
(6)存入txt文檔:將爬取到的所有信息保存到txt文檔中;
(7)對文檔短評進行分詞:使用jieba庫,對保存下來的短評txt文檔進行分詞,分詞后,在單獨個體之間添加空格;
(8)制作并生成詞云:通過wordcloud庫進行詞云的制作,選好詞云形狀圖片,設置詞云字體,剔除如“真的”“什么”“但是”“而且”“那么”等無關字。設置詞云背景色等,最終制作并生成詞云可視化圖片。
根據以上實現思路,使用Python完成代碼編寫,其部分實現核心代碼如圖3所示。
2.3? 運行結果
通過對代碼的不斷調試與測試,最終實現了基于Python的網絡爬蟲運行程序,得到短評txt文檔,根據文檔內容生成的詞云效果圖如圖4和圖5所示。
3? 結? 論
隨著大數據與人工智能時代的來臨,以及海量數據的不斷涌現,快速準確地獲取用戶想要的信息變得尤為迫切和重要,從而使得網絡爬蟲技術的應用日益增多,本文詳細介紹了網絡爬蟲的相關分類及其應用,同時著重闡述了基于Python的網絡爬蟲,描述了其爬蟲原理及流程,最后本文通過基于Python的豆瓣影評的爬取并進行存儲,最終實現詞云可視化效果,同時詳細闡述了基于Python的網絡爬蟲技術的實現細節及過程,效果良好。
參考文獻:
[1] 常逢佳,李宗花,文靜,等.基于Python的招聘數據爬蟲設計與實現 [J/OL].軟件導刊:1-4.[2019-08-13].http://kns.cnki.net/kcms/detail/42.1671.TP.20190731.1013.042.html.
[2] 張露.網絡爬蟲技術在大數據審計中的應用 [J].合作經濟與科技,2019(7):190-192.
[3] 李俊華.基于Python的數據分析 [J].電子技術與軟件工程,2018(17):167.
作者簡介:李俊華(1988-),女,漢族,黑龍江哈爾濱人,講師,碩士研究生,研究方向:大數據、Python。