亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        針對微博的免登錄分布式網絡爬蟲的研究

        2019-07-25 09:40:10
        計算機測量與控制 2019年7期
        關鍵詞:分布式計算爬蟲列表

        (西安理工大學 自動化與信息工程學院,西安 710000)

        0 引言

        隨著人類社會進入互聯(lián)網時代,數(shù)據(jù)已經成為了一種新的資源。人們在互聯(lián)網上挖掘數(shù)據(jù)資源后,進行大數(shù)據(jù)分析,可以產生巨大的社會和經濟價值。

        新浪微博作為國內最大的微博平臺已經深入人們生活,2018年6月月活躍用戶數(shù)增至4.31億,日活躍用戶數(shù)增至1.9億,每天新產生微博數(shù)千萬條。微博[1]具有傳播速度快,實時性高,覆蓋面廣等特點,使得其中的數(shù)據(jù)具有很高的價值。尤其是它的實時性,已經讓其成為輿情分析最好的數(shù)據(jù)源。

        目前獲取微博數(shù)據(jù)通用的解決方案是新浪官方提供的API和網絡爬蟲。但是官方API嚴格限制訪問頻率,再加上新浪設置了諸多反爬蟲障礙,使得快速獲取微博中的海量數(shù)據(jù)成為了難題。

        廉捷[2]等人提取采用官方API和普通網絡爬蟲的方法采集數(shù)據(jù),但是由于API的訪問限制,獲取大數(shù)據(jù)量時速率明顯較慢;黃延煒、劉嘉勇[3]提出將微博官方API和基于網絡數(shù)據(jù)流的微博采集方法相結合的方案,雖然數(shù)據(jù)抓取速度相對更快,但是依然沒有突破官方API的訪問限制,還犧牲了一定的數(shù)據(jù)完整性;孫青云[4]等人提出了基于模擬登錄的網絡爬蟲采集方案,打破了API的訪問限制,解決了傳統(tǒng)的網絡爬蟲需要身份驗證的問題,但是由于增加了模擬登錄操作以及單機計算能力的限制,數(shù)據(jù)獲取速度依然不足以滿足對海量數(shù)據(jù)獲取的要求。

        另外,在對分布式網絡爬蟲的研究方面,斯坦福大學的Cho J和Garcia-Molina[5]提出了多個分布式網絡爬蟲架構并且首次給出了分布式網絡爬蟲的分類方法和評價標準等一系列基本概念,認為分布式網絡爬蟲與單機爬蟲相比,具有高擴展性和減少網絡負載的優(yōu)勢,為分布式網絡爬蟲的后續(xù)研究打下了基礎。DL Quoc等人提出了一種地理分布式的網絡爬蟲系統(tǒng)UniCrawl[6];還有Apache基金會資助的開源網絡爬蟲項目Nutch。

        本文以新浪微博這個優(yōu)質的社交平臺為數(shù)據(jù)源,先設計了一個免登錄的網絡爬蟲,又將Hadoop大數(shù)據(jù)平臺與該爬蟲相結合,設計了一個免登錄的分布式網絡爬蟲系統(tǒng),可以很好解決海量數(shù)據(jù)挖掘的問題。主要工作如下:

        1)對于新浪微博,設計了免登錄的爬蟲程序,實現(xiàn)了比模擬登錄爬蟲更快的數(shù)據(jù)抓取,并且保證數(shù)據(jù)的完整性和程序的穩(wěn)定性。

        2)設計了一個分布式爬蟲系統(tǒng)。利用Hadoop分布式計算平臺,將(1)中設計的爬蟲程序MapReduce化,利用多臺計算機的計算能力,實現(xiàn)更加快速的信息獲取。

        1 免登錄微博爬蟲的設計

        1.1 新浪官方API

        新浪微博開放平臺開放了包括微博、評論、用戶及關系在內的二十余類接口,通過Oauth2.0用戶授權后即可在任意開發(fā)環(huán)境下使用。雖然新浪微博API提供的功能豐富齊全,但是由于對訪問速度有限制,見表1,這樣的限制不滿足我們想要快速抓取海量用戶微博數(shù)據(jù)的要求,所以我們選擇利用網絡爬蟲來獲取微博數(shù)據(jù)。

        表1 新浪微博官方API訪問限制表 次/小時

        1.2 免登錄穩(wěn)定抓取微博數(shù)據(jù)

        用戶訪問微博時需要登錄才能完整獲取信息。網絡爬蟲為了獲取完整數(shù)據(jù)通常也需要設置模擬登錄操作。但是這個操作相對復雜,而且需要與Web服務器多一次交互,所以速度會因此減慢。

        我們發(fā)現(xiàn)了一個更好的數(shù)據(jù)采集方法,即通過解析動態(tài)網頁XHR的URL,來獲取微博動態(tài)網頁的源代碼,這樣可以巧妙地實現(xiàn)免登錄抓取微博動態(tài)網頁,同時保證了數(shù)據(jù)的完整性。

        我們發(fā)現(xiàn)微博用戶首頁XHR的URL為固定格式,如下:

        https://m.weibo.cn/api/container/getIndex?type=uid&value=+ID+&containerid=107603+ID+&page=1

        只要通過用戶ID和該固定格式,就可以生成每個用戶的微博首頁XHR的URL,然后直接利用爬蟲解析這個URL,就可以跳過登錄操作,免登錄的抓取微博數(shù)據(jù)。

        另外,由于微博互動量巨大,服務器壓力較大,如果快速大規(guī)模爬取微博數(shù)據(jù)時,會觸發(fā)微博預設的爬蟲檢測機制,服務器一旦檢測訪問為爬蟲,則拒絕其訪問,讓爬蟲難以長時間穩(wěn)定運行。所以,我們利用付費IP代理建立IP代理池,讓我們的爬蟲程序隨機切換IP代理池中的IP,將爬蟲“偽裝”成不同地點的用戶進行訪問,規(guī)避微博的反爬蟲系統(tǒng)的檢測。

        1.3 設計針對微博的免登錄網絡爬蟲

        首先,由于微博PC端網頁結構復雜,不利于信息抓取,而其移動端網頁結構相對簡單,主要數(shù)據(jù)如微博內容、評論、時間等信息并沒有缺失,所以我們選擇對微博的移動端網頁進行爬取。

        用戶是微博的基本單元,微博用戶通過互相“關注”形成了如圖1網狀結構。所有的數(shù)據(jù)采集都需以用戶微博首頁為起點,但是微博并不提供所有的用戶列表,所以我們首先需要盡可能多的獲取微博用戶列表。

        圖1 微博用戶網絡結構圖

        我們可以通過這個網絡,利用爬蟲,獲取大量的用戶ID。由于用戶形成的網絡結構復雜,深度較大,很容易形成抓取“黑洞”,而且隨著深度的不斷增加,爬取到的用戶重復度會越來越高,再加上我們設計的網絡爬蟲無需進行特定主題搜索,所以我們設計了一個基于廣度優(yōu)先策略的通用網絡爬蟲來獲取微博用戶列表。

        在獲取到微博用戶列表后,再設計一個通用網絡爬蟲,遍歷用戶列表中的URL,解析出網頁源代碼,利用正則表達式或網頁標簽抓取每個用戶的數(shù)據(jù)。綜上,我們設計了如圖2的免登錄網絡爬蟲系統(tǒng)。

        圖2 免登錄微博網絡爬蟲工作流程

        具體過程如下:

        1)我們從微博上選取各個領域一些大V用戶首頁的URL作為爬蟲的種子集合,具體如表2。

        表2 大V用戶表

        2)然后將URL放入到待爬取的初始隊列中。

        3)根據(jù)待爬取列表中的URL訪問爬取網頁源代碼,解析網頁,利用正則表達式提取粉絲列表中的用戶ID和該用戶的粉絲數(shù)。

        每個用戶微博首頁的粉絲列表和每條微博的評論中含有用戶鏈接,但相比之下微博評論中的用戶鏈接數(shù)量較少,且存在大量重復。為了高效獲取用戶列表,我們只抓取用戶粉絲列表中的新用戶連接。

        4)用戶過濾。

        微博用戶中存在許多“僵尸”用戶,這些用戶只發(fā)廣告或充當“水軍”,他們所發(fā)微博價值很小,有時甚至產生副作用,因此我們對用戶粉絲數(shù)設定閾值F=10,忽略粉絲小于F的用戶來規(guī)避“僵尸”用戶。

        5)利用用戶ID生成微博用戶首頁URL,保存到MySQL數(shù)據(jù)庫中并利用MySQL去重。

        在MySQL數(shù)據(jù)庫中建表時,對用戶ID這一列使用UNIQUE約束,SQL語句如下:

        CREATE TABLE userlist(

        ......

        id INT(20),

        url VARCHAR(100),

        ......

        UNIQUE(id)

        )

        這樣,當發(fā)現(xiàn)一個用戶ID,經過過濾并生成該用戶微博首頁XHR的URL,將ID和URL存入MySQL數(shù)據(jù)庫時,如果是重復ID則無法存入數(shù)據(jù)庫,以此達到去重的目的。同時,將去重后的新用戶連接放入待爬行的隊列中。

        6)判斷,如果用戶數(shù)大于等于1000萬或者沒有發(fā)現(xiàn)新用戶連接,則進行7);否則重復步驟2)、3)、4)、5),繼續(xù)獲取該新用戶的粉絲列表中的用戶URL,擴充用戶列表。

        7)設計通用網絡爬蟲,獲取微博數(shù)數(shù)據(jù)。

        設計一個通用網絡爬蟲,遍歷前幾步獲得的用戶列表,根據(jù)每個用戶微博URL獲取網頁源代碼,利用正則表達式或網頁標簽抓取用戶信息、所發(fā)微博、時間、地點、所用設備等數(shù)據(jù),并保存到MySQL中。

        通過這個免登錄微博爬蟲系統(tǒng),我們可以避免設置復雜的模擬登錄操作,規(guī)避掉諸多反爬蟲策略,實現(xiàn)更加快速的免登錄長時間穩(wěn)定的數(shù)據(jù)采集,同時保證了數(shù)據(jù)的完整性。

        2 設計分布式免登錄微博網絡爬蟲系統(tǒng)

        第一節(jié)中,我們設計了采取廣度優(yōu)先策略的網絡爬蟲獲取用戶列表,然后再利用通用網絡爬蟲遍歷用戶列表獲取微博數(shù)據(jù)。但是隨著用戶列表的不斷增大,達到千萬級、億級,以及對于數(shù)據(jù)需求量的不斷擴大,單機遍歷用戶列表爬蟲的速度已經不能滿足需求,所以我們將Hadoop分布式計算平臺與免登錄網絡爬蟲相結合,設計出可以滿足海量數(shù)據(jù)采集需求的免登錄分布式網絡爬蟲。

        2.1 Hadoop分布式計算平臺

        Hadoop[7]是Apache下的開源分布式計算平臺。Hadoop可以將大量的普通計算機搭建成集群,整合這些計算機的運算能力和存儲能力,解決了大數(shù)據(jù)并行計算、存儲、管理等關鍵問題。

        HDFS(Hadoop Distributed File System)和MapReduce是Hadoop分布式系統(tǒng)的核心。HDFS[8]是分布式計算中數(shù)據(jù)存儲管理的基礎。MapReduce[9]是一種高性能的分布式計算框架,可將一個大的任務分配給數(shù)千臺普通計算機的集群,并且高可靠性和高容錯性并行處理海量數(shù)據(jù)集。HDFS在集群上實現(xiàn)分布式文件系統(tǒng),MapReduce在集群上實現(xiàn)分布式計算和任務處理。他們相互依賴,共同完成了Hadoop分布式計算平臺的主要任務。

        另外,Hadoop還有為它量身打造的非關系數(shù)據(jù)庫HBase[10]。利用HBase技術可在大量廉價普通計算機上搭建起大規(guī)模結構化存儲集群。本次我們設計的分布式網絡爬蟲系統(tǒng)利用HBase數(shù)據(jù)庫存儲。

        2.2 基于MapReduce的網絡爬蟲系統(tǒng)的設計

        在進行爬蟲設計前,需要先將用戶列表從之前的MySQL中轉移到Hbase中。Hadoop平臺提供了一個組件Sqoop,它的功能是在Hadoop和關系數(shù)據(jù)庫之間傳送數(shù)據(jù),可以將數(shù)據(jù)在MySQL、Oracle數(shù)據(jù)庫和HBase數(shù)據(jù)庫之間進行傳遞。我們先利用Sqoop將MySQL數(shù)據(jù)庫中的用戶列表遷移到HBase數(shù)據(jù)庫中,具體命令如下:

        sqoop import

        --connect jdbc:mysql://192.168.1.12: 3306/ll --username xxxx --password yyyy

        --query "SELECT id FROM userlist"

        --hbase-table userlist --hbase-create-table

        --hbase-row-key id

        --column-family user

        在HBase接收到之前的用戶列表后,我們將第1節(jié)中設計的通用爬蟲MapReduce化,這樣就可以將免登錄抓取微博數(shù)據(jù)的任務分配給多臺普通計算機共同并行完成,大大加快了數(shù)據(jù)采集速度。

        由于該過程中只需要Map過程,不需要Reduce過程。所以網絡爬蟲細節(jié)如下:

        Map過程:

        輸入:HBase中的用戶ID;

        輸出:用戶所發(fā)微博文本;

        1.map(ImmutableBytesWritable key, Result value){

        2. id = value.get(); //提取Hbase中的用戶ID

        3. create xhr.url from id; //根據(jù)用戶ID生成XHR的URL

        4. crawl html without login from url;

        5. get data from html;

        6. save data to HBase;

        7.}

        該分布式爬蟲的輸入為HBase數(shù)據(jù)庫,而不是通常的HDFS,因此對主函數(shù)做特殊說明。具體如下:

        1.main(){

        2. create configuration; //根據(jù)集群生成Mapreduce任務配置

        3. create job(configuration); //根據(jù)配置建立Mapreduce任務

        4. set input HBase column and columnfamily;

        5. set input HBase Table,Mapperclass and job;

        6. set output HBase column,columnfamily,Table,Mapperclass and job;

        7. //不需要像以HDFS為輸入輸出時設置Map過程輸出的鍵、值類型;Mapreduce任務輸出的鍵、值類型和輸出的目錄等。

        8.}

        這樣設計好的分布式爬蟲系統(tǒng)就可以在map過程時,把對千萬級、億級用戶采集的大任務分發(fā)到各個節(jié)點,各個節(jié)點共同完成任務,快速采集海量數(shù)據(jù)。

        3 實驗與分析

        3.1 實驗環(huán)境

        實驗硬件:I7 CPU,16 G內存,2 TB硬盤服務器。

        實驗軟件:CentOS 6.5、MySQL5.7、Hadoop-2.7.3、HBase-1.2.4、Zookeeper-3.4.6、Sqoop-1.4.6

        根據(jù)文獻[11]搭建Hadoop分布式計算集群,共包含1個Mater主節(jié)點,7個Slave從節(jié)點。

        3.2 實驗結果與分析

        在大規(guī)模爬取數(shù)據(jù)時,爬蟲的穩(wěn)定性是最基本的要求。首先對比本文免登錄爬蟲與模擬登錄爬蟲的穩(wěn)定性,利用兩種爬蟲分別對微博進行10、15、20、25、30小時的抓取,比較程序是否可以穩(wěn)定運行。結果如表3。

        表3 兩種爬蟲穩(wěn)定性比較

        由此可見,本文設計的免登錄爬蟲與模擬登錄操作的爬蟲均可實現(xiàn)對于新浪微博的長時間穩(wěn)定抓取。

        然后我們比較官方API、免登錄爬蟲與模擬登錄爬蟲獲取數(shù)據(jù)的完整性。驗證它們是否可以抓取用戶ID,所在身份城市,個人描述,性別,粉絲列表,關注列表,所發(fā)微博詳情(微博內容、時間、地點、設備等)等。結果如表4。

        接下來,比較兩種爬蟲在普通單機情況下的數(shù)據(jù)采集效率,讓兩種爬蟲在10、15、20、25、30小時內穩(wěn)定抓取微博數(shù),對比結果如圖3。

        表4 兩種爬蟲與官方API數(shù)據(jù)完整性對比

        圖3 免登錄爬蟲與模擬登錄爬蟲速度對比

        由此可見,本文設計的免登錄爬蟲,由于沒有了復雜的模擬登錄操作,更加簡單而且少了一次與Web服務器的交互,因此數(shù)據(jù)抓取速度更快。

        最后,比較單機免登錄網絡爬蟲與分布式網絡爬蟲的數(shù)據(jù)采集效率。通過5次連續(xù)24小時的抓取,對比抓取到的微博數(shù),結果如圖4。

        圖4 單機爬蟲和分布式網絡爬蟲速度對比

        結果表明:雖然我們設計的單機網絡爬蟲可以突破API訪問次數(shù)的限制,實現(xiàn)免登錄長時間的穩(wěn)定抓取,但是單機的計算能力還是限制了其抓取速度,結合Hadoop大數(shù)據(jù)平臺后,設計出的分布式網絡爬蟲,利用集群的運算能力,可以大大加速微博抓取效率,實現(xiàn)速度的10倍增長,滿足了人們對海量數(shù)據(jù)抓取的需求。

        4 結束語

        本文設計的針對微博的網絡爬蟲,以XHR的URL為入

        口抓取數(shù)據(jù),可以實現(xiàn)免登錄數(shù)據(jù)采集。通過實驗表明,與模擬登錄的網絡爬蟲相比,在保證了數(shù)據(jù)完整性與穩(wěn)定性的同時,可以更快速地抓取數(shù)據(jù)。然后,我們將Hadoop平臺與免登錄爬蟲相結合,利用集群的強大運算能力,大大增加了數(shù)據(jù)采集速度。這些數(shù)據(jù)可以為政府部門進行網絡輿情監(jiān)控提供支持,還可用于智能推薦系統(tǒng)等。

        猜你喜歡
        分布式計算爬蟲列表
        巧用列表來推理
        利用網絡爬蟲技術驗證房地產灰犀牛之說
        基于Python的網絡爬蟲和反爬蟲技術研究
        學習運用列表法
        擴列吧
        利用爬蟲技術的Geo-Gnutel la VANET流量采集
        電子測試(2018年1期)2018-04-18 11:53:04
        大數(shù)據(jù)環(huán)境下基于python的網絡爬蟲技術
        電子制作(2017年9期)2017-04-17 03:00:46
        基于云計算的移動學習平臺設計與實現(xiàn)
        軟件導刊(2016年11期)2016-12-22 21:47:07
        云計算中MapReduce分布式并行處理框架的研究與搭建
        面向異構分布式計算環(huán)境的并行任務調度優(yōu)化方法
        国产午夜三级一区二区三| 男人的天堂手机版av| 久久偷看各类wc女厕嘘嘘偷窃| 国内精品久久久久影院一蜜桃| 欧美性受xxxx狂喷水| 精品免费看国产一区二区| 国产精品视频一区二区三区四| av中文字幕少妇人妻| 中文字幕精品乱码一二三区| 中文字幕文字幕视频在线| 全亚洲高清视频在线观看| 狼狼综合久久久久综合网| 日本一区二区在线播放| 亚洲人成人77777网站| 麻豆国产成人AV网| 新久久国产色av免费看| 91成人自拍国语对白| 国产精品亚洲一区二区在线观看| 欧美俄罗斯乱妇| 亚洲第一无码精品久久| 国产91精品清纯白嫩| 亚洲精品久久久久一区二区| 日本少妇被黑人xxxxx| 91孕妇精品一区二区三区| 人妻少妇久久精品一区二区| 精品露脸熟女区一粉嫩av| 凹凸在线无码免费视频| 久久精品中文字幕极品| 中文字幕乱码中文乱码毛片| 蜜桃码一区二区三区在线观看| 麻豆最新国产av原创| 亚洲av无码一区二区三区网址 | 偷拍综合在线视频二区| 九九99久久精品国产| 国产美女裸身网站免费观看视频| 中文字幕中乱码一区无线精品| 洲色熟女图激情另类图区| 无码国产69精品久久久孕妇| 国产精品无码不卡在线播放| 91久久精品一二三区色| 成人无码av免费网站|