邱俊杰



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