胡雅麗
(山西青年職業(yè)學院 計算機與信息工程系,山西 太原 037000)
關鍵字:Python;網(wǎng)絡爬蟲;數(shù)據(jù)分析
近年來,隨著互聯(lián)網(wǎng)大數(shù)據(jù)、云計算以及人工智能等技術的迅猛發(fā)展,各行各業(yè)產(chǎn)生了大量的數(shù)據(jù),其中數(shù)據(jù)的海量性、開放性以及實時性成為數(shù)據(jù)挖掘的主要特性。在數(shù)據(jù)共享的時代,人們?nèi)绾潍@取到對自己有價值的數(shù)據(jù)已經(jīng)成為炙手可熱的話題,而搜索引擎以其獨有的特點抓住了這次機會,可以極大可能地搜索到大量的網(wǎng)頁。利用搜索引擎中重要的網(wǎng)絡爬蟲模塊可以實現(xiàn)對網(wǎng)頁中相關信息的自動搜集及定向采集,用戶只需要在搜索引擎中輸入關鍵字檢索網(wǎng)頁,一大批與之有關的網(wǎng)頁信息就會被查找出來,而網(wǎng)絡爬蟲作為引擎的重要組成部分,在搜索網(wǎng)頁中起著至關重要的作用。Python語言中提供了很多爬蟲框架,利用Python語言爬蟲數(shù)據(jù)變得更加高效,在一定程度上大大地節(jié)省了人力和物力資源[1]。
Python是一門動態(tài)的、跨平臺的、面向?qū)ο蟮囊约敖忉屝偷挠嬎銠C腳本語言,由于其代碼規(guī)范簡潔、關鍵字相對較少且說明文檔很簡單,容易上手,因此也被稱為可執(zhí)行的偽代碼。它可以使人們只關心完成什么樣的工作任務,而不是糾結(jié)于語法。它能夠?qū)⒂闷渌Z言制作的各種模塊很輕松地聯(lián)結(jié)在一起,常被昵稱為膠水語言,擴展性很強,可以調(diào)用C和C++等編寫的程序,也可以在其他程序中使用,或?qū)σ恍┸浖M行二次開發(fā)。另外,Python是開源的,它擁有非常多優(yōu)秀的庫,可以用于數(shù)據(jù)分析等。更重要的是,Python與開源大數(shù)據(jù)平臺Hadoop具有很好的兼容性。
數(shù)據(jù)的類型多種多樣,通過Python數(shù)據(jù)分析人們可獲知數(shù)據(jù)中的數(shù)量、用詞以及發(fā)送時間。Python數(shù)據(jù)分析的主要目的就是將一大批隱藏的雜亂無章的數(shù)據(jù)信息提煉出來,找到其中的內(nèi)在規(guī)律,幫助用戶做出正確的判斷,從而進行決策。其具有豐富和強大的庫,能夠處理很多工作,常用的類庫有IPython、Pandas以及Spyder等。其中IPython能夠提高編寫、測試以及調(diào)試Python的速度,Pandas是Python數(shù)據(jù)分析的核心庫,Spyder是一個強大的交互式Python語言開發(fā)環(huán)境[2]。一個完整的數(shù)據(jù)分析項目大致可分為5個流程,具體如圖1所示。
圖1 Python數(shù)據(jù)分析流程圖
網(wǎng)絡爬蟲的實質(zhì)就是利用Python程序設計語言抓取網(wǎng)頁內(nèi)容。根據(jù)用戶的需求,遵循一定的規(guī)則,自動抓取網(wǎng)頁中有價值的數(shù)據(jù)[3]。在爬蟲過程中,需要一個隊列來存放獲取網(wǎng)頁數(shù)據(jù)的所有URL,從第一個初始的URL打開指定的網(wǎng)頁,選擇需要進行爬蟲的內(nèi)容,獲取網(wǎng)頁中源代碼的全部鏈接信息,將獲取到新的URL放置在URL隊列中,只要用戶爬蟲數(shù)據(jù)的任務沒有完成,這個過程將會一直執(zhí)行下去,直到爬蟲結(jié)束將其關閉[4,5]。
網(wǎng)絡爬蟲一般分為通用和聚焦兩種類型。其中通用類型的網(wǎng)絡爬蟲也稱為全網(wǎng)爬蟲,利用搜索引擎,爬取種子頁面(百度、谷歌、雅虎等),繼而通過并行方式爬取互聯(lián)網(wǎng)上所有數(shù)據(jù),主要目的是將互聯(lián)網(wǎng)上的網(wǎng)頁下載到本地,形成一個互聯(lián)網(wǎng)內(nèi)容的鏡像備份[6]。相比于通用網(wǎng)絡爬蟲,聚焦類型的網(wǎng)絡爬蟲則是面向特定主題需求的一種網(wǎng)絡爬蟲程序,是有針對性的爬取與主題相關的數(shù)據(jù),過濾掉與主題無關的數(shù)據(jù),節(jié)省了硬件和網(wǎng)絡資源,頁面更新快[7]。
網(wǎng)絡爬蟲一般首先要找到需要爬取的網(wǎng)頁URL,將這些種子URL加入到待抓取URL隊列中,其次選擇合適的爬蟲工具從URL隊列中取出待取URL,通過Python代碼解析DNS得到主機的IP地址,并將URL對應的網(wǎng)頁下載下來,最后將爬取的網(wǎng)頁數(shù)據(jù)保存在數(shù)據(jù)庫中。在爬取網(wǎng)頁URL時,還會提取其他新的網(wǎng)頁URL,此時需要將新提取出來的種子URL加入到待抓取URL隊列中,再次解析DNS,從而進入下一個循環(huán)[8-10]。網(wǎng)絡爬蟲的工作機制如圖2所示。
圖2 網(wǎng)絡爬蟲的工作機制
首先需要導入Python爬蟲需要的類庫,其中os庫是標準庫,用來完成基本的交互功能,requests庫是第三方庫,可以直接構(gòu)建常用的get和post請求并發(fā)起,lxml和etree是通過xpath解析DOM樹,urllib和request是負責打開瀏覽url內(nèi)的html文本。導入Python類庫為:
利用User-Agent獲取當前目標網(wǎng)站的Http協(xié)議中頭部信息,提供當前瀏覽器類型、操作系統(tǒng)及版本、CPU類型、瀏覽器渲染引擎、瀏覽器語言、瀏覽器插件等信息的標識。具體為:
存儲數(shù)據(jù)的程序為:
創(chuàng)建主函數(shù)為:
目前,互聯(lián)網(wǎng)上的數(shù)據(jù)多且復雜,用戶想要在短時間內(nèi)獲取到有價值的數(shù)據(jù)很困難。本文針對某網(wǎng)站的視頻進行爬取進行了簡單的闡述,使用具有強大功能的Python語言在爬取視頻時提供重要的支持,爬取的視頻以mp4文件的形式保存在程序中指定的目錄下,以極快的速度獲得了想要的信息。