• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于Python的新浪微博用戶數據獲取技術

      2018-04-03 07:11:21東南大學信息科學與工程學院
      電子世界 2018年5期
      關鍵詞:源碼爬蟲新浪

      東南大學信息科學與工程學院 羅 咪

      引言

      新浪微博作為我國主流社交媒體,擁有海量數據。自2009年推出以來,新浪微博的使用人數急速上升,帶來的是信息量的劇增。每天,人們通過轉發(fā)、互粉、點贊等行為發(fā)表自己的喜惡看法,將個人觀點放大到社會空間。在如今這個大數據時代,社交網絡分析依賴于海量的數據來探索人類社會關系中的奧秘,而如何獲取這些數據至關重要。在此之前,國外的研究學者已經對Twitter、You-Tube等社交平臺進行了一系列的分析,其研究方法相對成熟。他們獲取數據的主要方法是通過網站官方提供的API接口。[1]在國內,由于新浪官方目前限制相關數據接口的使用,所以研究者要想獲取數據,需另辟蹊徑。[2]

      本文基于Python語言提出了一種無需借助官方API接口就能獲取用戶數據的方法---多線程爬蟲技術。該項技術與傳統(tǒng)的網絡爬蟲相比,主要有以下三點改進:首先,使用多線程爬蟲取代傳統(tǒng)的單線程爬蟲,提高了數據獲取速率;其次,針對微博的反爬蟲機制設計了四種突破策略;最后,成功實現了對于微博評論等動態(tài)網頁的爬取。

      1.Scrapy多線程爬蟲框架

      目前,用python實現多線程爬蟲主要有兩種方法。一是自行設計多線程函數,二是使用python的scrapy包來包裝線程對象。[3] 本爬蟲系統(tǒng)主要使用Scrapy框架編寫,Scrapy框架是一種引擎和下載器之間的框架,主要功能是處理Scrapy引擎與下載器之間的請求及響應。其基本組件和工作原理如圖1所示。

      在Scrapy架構下,用戶需要編寫爬蟲部件spiders和數據處理部件item pipeline。

      2.模擬登陸

      模擬登陸是爬蟲技術所要攻克的第一個難題。所謂模擬登陸,即讓計算機模仿人工操作,以達到欺騙服務器的目的。我們分別嘗試了以下四種策略,并比較了它們的優(yōu)劣性。

      (1)手動獲取 cookie 登陸:該方法較為簡單,但是需要人為參與,自動化程度低。

      (2)post 方法登陸weibo.com:該方法難度較高,主要因為以下三點。其一,網頁版微博上存在大量的廣告圖片,javascript代碼復雜,從而降低了后續(xù)工作中源碼分析的效率。[4]其二,官方分別使用了Base64 和 RSA 加密算法對用戶賬號和密碼進行了加密。其三,第一次跳轉到的URL在使用正則表達式匹配后才能得到目標主頁。

      圖1 Scrapy多線程爬蟲框架原理圖

      (3)post方法登陸weibo.cn:由于移動端頁面相對簡潔,網頁源碼較少,所以相對登陸網頁版更加簡單,但也存在兩個難點。其一,登陸時會出現驗證碼,本文采用的解決方法是下載到本地然后手動輸入。其二,登陸 http://weibo.cn/ 后會有一個重定向,這時必須設定user-agent,否則post完成后會卡在跳轉頁面。

      (4)利用自動化測試工具Selenium: Selenium 是一個自動化測試工具,相當于一個沒有界面瀏覽器,可以完全模擬瀏覽器行為,所以利用它進行模擬登陸非常方便。[5]

      3.動態(tài)網頁抓取

      新浪微博與豆瓣、知乎等其他社交網站的區(qū)別在于:微博中很多網頁都是動態(tài)的,爬取有一定的難度,所以需要特殊處理。主要有兩種爬動態(tài)網站的策略可以選取。第一種方法是使用自動化測試工具selenium進行抓取,這主要是因為chrome driver可以渲染用javascript生成的網站。具體做法是先獲取網頁源碼,再使用 XPath路徑語言解析網頁。Selenium 抓取雖然簡潔方便,但存在抓取速率低效,不穩(wěn)定的缺點,所以還可以使用解析json數據的方法。下面分別講解微博評論和用戶粉絲列表數據的獲取辦法。

      3.1 微博評論抓取

      首先,抓包尋找到網站ajax請求的接口,接著找尋該的接口url地址規(guī)律。例如,我們抓包后發(fā)現ajax請求為:

      經過測試后,我們可以將該url接口簡化為:

      從簡化后的url地址可以歸納出新浪微博評論的接口規(guī)律為:

      下面,我們需要通過微博地址獲取這條微博獨一無二的id。經過網頁源碼分析我們發(fā)現,微博的id出現在網頁dom元素屬性的很多地方,而且都是以mid開頭,這樣就能根據網頁源碼正則匹配出這條微博的id。[6]最后只要改變url接口里的page參數,獲取所有評論源碼,再使用xpath提取出所需的評論數據即可。

      3.2 微博粉絲列表抓取

      以查看劉亦菲粉絲列表為例,抓包后得到結果如圖2所示。

      圖2 劉亦菲粉絲列表抓包結果

      可以得出粉絲列表的url地址為:

      其中,每個粉絲擁有不同的containerid參數,而since_id從1到250都可以訪問,所以每次訪問這個url都可以返回含有20個粉絲信息的json數據。如圖3所示。

      圖3 劉亦菲粉絲列表json數據返回結果

      4.克服反爬蟲機制

      為了防止個人盜取微博數據用于非法用途,新浪微博官方對微博爬蟲采取抵制態(tài)度,并且他們的反爬蟲機制也在不斷完善。如果爬蟲請求過于頻繁,賬戶容易被封禁,降低了數據獲取的效率。本系統(tǒng)采用以下4個策略突破微博的反爬蟲機制:

      (1) 動態(tài)更改 user-agent:主要利用python的fake user agent包,讓每一次請求都偽造一個用戶代理,使服務器誤以為是來自不同瀏覽器的請求。從而降低爬蟲被發(fā)現的概率。

      (2)動態(tài)更改 IP:首先獲取一串可用的高速代理 IP 列表,然后在每一次請求時更改 IP 地址,讓服務器無法鎖定具體的訪問地址,以達到迷惑服務器的目的。

      (3)控制爬取速率:若爬取速率過快,服務器容易檢測出異常,所以速率一般控制在 1.5-2s為宜。

      (4)建立并維護cookie 池:由于新浪微博會針對一個賬戶進行速率監(jiān)控,所以更穩(wěn)妥的方法是一次多獲取幾個 cookie,每次請求隨機設定一個 cookie。

      5.總結

      本文設計的新浪微博爬蟲使用python語言實現,并且可以根據實際需要更改爬取條件和爬取目標。在傳統(tǒng)靜態(tài)網頁爬蟲的基礎上,探討了針對新浪微博網站需要解決的三大問題: 模擬登陸、動態(tài)網頁信息抓取、反爬蟲機制,并給出了切實可行的解決方案。在動態(tài)網頁抓取中,需要應用自動化測試工具Selenium來模仿真正用戶的操作,以及利用正則表達式來匹配數據。值得一提的是,最終得到的數據往往與所需要的信息有細微差別,需要經過數據清洗才能進入分析的流程。實踐證明,該爬蟲系統(tǒng)能夠實現對微博數據高效穩(wěn)定的采集,并符合實時性性、健壯性和靈活性等性能指標要求。

      [1]Axel Bruns, Yuxian Eugene Liang. (2012). Tools and methods for capturing Twitter data during natural disasters. Peer-Reviewed Journal on the Internet, 17(4).Retrieved from:http://journals.uic.edu/ojs/index.php/fm/article/view/3937.

      [2]吳劍蘭.基于Python的新浪微博爬蟲研究[J].無線互聯科技,2015(06):93-94.

      [3]李俊麗.基于Linux的python多線程爬蟲程序設計[J].計算機與數字工程,2015,43(05):861-863+876.

      [4]陳珂,藍鼎棟,柯文德,黎樹俊,鄧文天.基于Java的新浪微博爬蟲研究與實現[J].計算機技術與發(fā)展,2017,27(09):191-196.

      [5]吳伶琳.基于Selenium的軟件自動化測試的研究與應用[J].計算機與現代化,2013(02):65-68.

      [6]胡軍偉,秦奕青,張偉.正則表達式在Web信息抽取中的應用[J].北京信息科技大學學報(自然科學版),2011,26(06):86-89.

      猜你喜歡
      源碼爬蟲新浪
      基于網頁源碼結構理解的自適應爬蟲代碼生成方法
      計算機應用(2023年6期)2023-07-03 14:11:56
      基于圖神經網絡的軟件源碼漏洞檢測方法
      計算機時代(2023年6期)2023-06-15 17:49:09
      利用網絡爬蟲技術驗證房地產灰犀牛之說
      猴子雖小
      讀者(2021年20期)2021-09-25 20:30:35
      基于Python的網絡爬蟲和反爬蟲技術研究
      企業(yè)如何保護源碼
      利用爬蟲技術的Geo-Gnutel la VANET流量采集
      電子測試(2018年1期)2018-04-18 11:53:04
      大數據環(huán)境下基于python的網絡爬蟲技術
      電子制作(2017年9期)2017-04-17 03:00:46
      新浪讀書排行榜
      閱讀時代(2017年3期)2017-03-11 07:24:51
      基于數據結構教輔系統(tǒng)的實驗課程改革
      計算機教育(2016年4期)2016-05-20 02:36:05
      九龙坡区| 阿拉善右旗| 亚东县| 水城县| 锡林浩特市| 嘉禾县| 岚皋县| 泽州县| 利辛县| 连云港市| 德江县| 社会| 彭阳县| 常山县| 木兰县| 吴江市| 汾西县| 当阳市| 拉孜县| 西盟| 东城区| 东乌| 凌源市| 荥阳市| 白水县| 定远县| 英吉沙县| 和田县| 崇仁县| 定襄县| 湄潭县| 阳原县| 青河县| 上虞市| 饶阳县| 灌云县| 泗水县| 汪清县| 遂宁市| 济源市| 锡林郭勒盟|