邱俊杰
摘要:互聯(lián)網(wǎng)自誕生以來,一直在推動(dòng)信息技術(shù)以及相關(guān)產(chǎn)業(yè)的快速發(fā)展。據(jù)Intemational Data Corporation(國(guó)際數(shù)據(jù)公司)發(fā)布的《數(shù)據(jù)時(shí)代2025》顯示,從2018年起全球每年產(chǎn)生的數(shù)據(jù)增長(zhǎng)到了175ZB,相當(dāng)于每天產(chǎn)生491EB的數(shù)據(jù)。在這個(gè)信息爆炸的時(shí)代,大數(shù)據(jù)分析技術(shù)和人工智能隨之產(chǎn)生,如何從復(fù)雜的數(shù)據(jù)信息庫(kù)中獲取我們所需要的信息,如何從這些信息中提煉出直觀的數(shù)據(jù)模型和結(jié)論,該文采用Python語(yǔ)言以定向爬取微博為例重點(diǎn)闡釋這兩個(gè)問題。
關(guān)鍵詞:Python;數(shù)據(jù)分析可視化;微博數(shù)據(jù)
中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2020)22-0043-02
開放科學(xué)(資源服務(wù))標(biāo)識(shí)碼(OSID):
1 引言
隨著互聯(lián)網(wǎng)上的數(shù)據(jù)量日趨龐大,同時(shí)近兩年國(guó)家鼓勵(lì)大眾創(chuàng)業(yè)萬眾創(chuàng)新,對(duì)于新晉互聯(lián)網(wǎng)企業(yè)來講,最大的障礙就是推廣產(chǎn)品和吸引流量。很多公司采用信息轟炸的粗暴方式向大范圍用戶推送廣告。顯而易見,這些方法是非常低效、浪費(fèi)資金而且不道德。本文是用大數(shù)據(jù)分析方法,快速高效獲取并分析客戶(互聯(lián)網(wǎng)公司、政府)的指定領(lǐng)域或關(guān)鍵詞,最后反饋分析結(jié)果給客戶(互聯(lián)網(wǎng)公司、政府),根據(jù)分析結(jié)果可以幫助企業(yè)或政府制定相應(yīng)的策略實(shí)現(xiàn)雙贏。
2 選擇Python的原因
隨著互聯(lián)網(wǎng)的快速發(fā)展、物聯(lián)網(wǎng)的興起以及計(jì)算機(jī)硬件系統(tǒng)不斷更迭,大數(shù)據(jù)分析技術(shù)、人工智能技術(shù)等學(xué)科應(yīng)運(yùn)而生,新興學(xué)科的發(fā)展讓Python語(yǔ)言有了適合的位置。在機(jī)器爬蟲領(lǐng)域,Python可以說是占據(jù)霸主地位,將網(wǎng)絡(luò)一切數(shù)據(jù)作為資源,通過自動(dòng)化程序進(jìn)行有針對(duì)性的數(shù)據(jù)采集、處理。擁有非常便捷高效的爬蟲框架,如Scrapy、PySpider、Selenium等等。
網(wǎng)絡(luò)爬蟲,我們可以將互聯(lián)網(wǎng)比作一張大網(wǎng),而爬蟲便是在這張網(wǎng)上抓取獵物的蜘蛛。[1]Python語(yǔ)言簡(jiǎn)單優(yōu)雅的開發(fā)理念,Python比較容易配置,對(duì)字符的處理也有很多種選擇,Py-thon也有豐富的網(wǎng)絡(luò)抓取模塊。Python爬蟲從網(wǎng)站某一個(gè)頁(yè)面開始,讀取內(nèi)容,找到相關(guān)鏈接地址,然后通過鏈接地址尋找下一個(gè)網(wǎng)站,一直循環(huán)下去。[2]如果把整個(gè)互聯(lián)網(wǎng)當(dāng)成一個(gè)網(wǎng)站,那么機(jī)器爬蟲就可以把互聯(lián)網(wǎng)上所有的網(wǎng)頁(yè)都抓取下來。[3]爬蟲可以抓取某個(gè)網(wǎng)站或者某個(gè)App的數(shù)據(jù)內(nèi)容,提取有用的信息。也可以模擬用戶在瀏覽器上的操作,實(shí)現(xiàn)自動(dòng)化運(yùn)行。爬蟲框架如圖1。
(1)URI管理器:管理待爬取的URL集合和已爬取的URL集合,傳送待爬取的URL給網(wǎng)頁(yè)下載器[4];
(2)網(wǎng)頁(yè)下載器:爬取URL對(duì)應(yīng)的網(wǎng)頁(yè),存儲(chǔ)成字符串或者JSON格式,然后傳送給網(wǎng)頁(yè)解析器;
(3)Python爬蟲通過URL管理器,判斷是否有待爬的URL,如果有需要爬的URL,通過調(diào)度器進(jìn)行傳遞給下載器,下載URL包含的內(nèi)容,并通過調(diào)度器傳送給解析器,解析URL包含的內(nèi)容,并將有價(jià)值數(shù)據(jù)和新的URL列表通過調(diào)度器傳遞給應(yīng)用程序,并輸出價(jià)值信息的全過程。[5]
3 爬取對(duì)象與過程
3.1爬取對(duì)象
本次研究對(duì)象是微博平臺(tái)上與某熱點(diǎn)主題相關(guān)的話題數(shù)據(jù)分析,本次主題以“手機(jī)”為例,爬蟲采取的編程語(yǔ)言版本是Python3.7。微博是一個(gè)不同用戶之間可以共享文字、圖片、視頻、音頻等信息的公共平臺(tái),微博蘊(yùn)藏的數(shù)據(jù)量是十分龐大的,而這些信息的價(jià)值是不可估量的。所以,如何提取出有價(jià)值的信息,是本文的重點(diǎn)部分。
3.2 爬取思路
爬取思路如圖2,與小微企業(yè)不同,由于新浪微博設(shè)置了多種反爬蟲機(jī)制,所以我們必須采用IP地址池、限制流量等多種反爬蟲機(jī)制,通過模擬登錄微博,識(shí)別驗(yàn)證碼,自動(dòng)抓取和分析微博網(wǎng)頁(yè)源代碼,自動(dòng)提取網(wǎng)頁(yè)數(shù)據(jù)實(shí)現(xiàn)微博數(shù)據(jù)自動(dòng)化抓取,最后結(jié)構(gòu)化存儲(chǔ)數(shù)據(jù)以便日后使用。[6]
3.3 模擬登錄
新浪微博這種公共平臺(tái)為了增加自家用戶流量,限制很多內(nèi)容必須登錄才能查看,而機(jī)器爬蟲并沒有在這些網(wǎng)站上注冊(cè)成為用戶,這時(shí)候就需要使用cookies來模擬用戶登錄,方法如下:
(1)使用谷歌瀏覽器登錄到新浪微博官網(wǎng)并使用已經(jīng)在新浪服務(wù)器上注冊(cè)的用戶登錄進(jìn)去;
(2)利用瀏覽器的開發(fā)者模式找到網(wǎng)頁(yè)源碼中post部分提取cookies字符段;
(3)將cookies字符段加入爬蟲程序源碼中。
3.4 內(nèi)容爬取
模擬登錄之后可以進(jìn)行下一步操作,微博平臺(tái)內(nèi)容分類多,需事先構(gòu)思好要爬取的目標(biāo)數(shù)據(jù)。首先分析目標(biāo)網(wǎng)站源碼,打開微博主頁(yè),以“手機(jī)”為關(guān)鍵詞搜索為例,獲取當(dāng)前URL,即爬取開始頁(yè)。然后導(dǎo)人pymysql、request、re等相關(guān)類庫(kù)函數(shù),根據(jù)網(wǎng)頁(yè)源碼的標(biāo)志詞編寫相應(yīng)的正則表達(dá)式,以獲取到用戶內(nèi)容、用戶手機(jī)品牌名稱、用戶地區(qū)、性別、生日、評(píng)論數(shù)、點(diǎn)贊數(shù)、轉(zhuǎn)發(fā)數(shù)等數(shù)據(jù)。最后把獲取到的數(shù)據(jù)結(jié)構(gòu)化存儲(chǔ)到MySQL數(shù)據(jù)庫(kù)中。
為了保證最后數(shù)據(jù)分析結(jié)論具有研究意義,爬取規(guī)則采取深度優(yōu)先,加大爬取時(shí)間跨度,盡可能多的爬取相關(guān)數(shù)據(jù),保證分析出的數(shù)據(jù)具有客觀性。
3.5 相關(guān)問題
在數(shù)據(jù)爬取的過程中為了保證爬蟲程序的魯棒性,本文對(duì)爬蟲程序進(jìn)行多種細(xì)節(jié)修改:1)增加IP地址池,讓程序可以利用多個(gè)IP輪流爬取數(shù)據(jù),避免被微博平臺(tái)定向封禁;2)為了降低爬蟲爬取時(shí)對(duì)服務(wù)器帶寬的影響,降低被系統(tǒng)發(fā)現(xiàn)的風(fēng)險(xiǎn),利用sleep函數(shù)延遲爬取數(shù)據(jù),以模擬人為操作的特征;3)利用header函數(shù),用來模擬瀏覽器訪問平臺(tái)數(shù)據(jù),以混淆微博的反爬蟲機(jī)制。
3.6 數(shù)據(jù)分析與可視化
本文考慮從用戶手機(jī)品牌、評(píng)論轉(zhuǎn)發(fā)、男女占比等維度分析大數(shù)據(jù),主要依據(jù)統(tǒng)計(jì)學(xué)方法。具體步驟如下: