999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

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

2019-07-25 09:40:10
計算機測量與控制 2019年7期
關鍵詞:數據庫用戶設計

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

0 引言

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

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

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

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

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

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

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

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

1 免登錄微博爬蟲的設計

1.1 新浪官方API

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

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

1.2 免登錄穩定抓取微博數據

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

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

我們發現微博用戶首頁XHR的URL為固定格式,如下:

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

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

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

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

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

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

圖1 微博用戶網絡結構圖

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

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

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

具體過程如下:

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

表2 大V用戶表

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

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

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

4)用戶過濾。

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

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

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

CREATE TABLE userlist(

......

id INT(20),

url VARCHAR(100),

......

UNIQUE(id)

)

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

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

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

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

通過這個免登錄微博爬蟲系統,我們可以避免設置復雜的模擬登錄操作,規避掉諸多反爬蟲策略,實現更加快速的免登錄長時間穩定的數據采集,同時保證了數據的完整性。

2 設計分布式免登錄微博網絡爬蟲系統

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

2.1 Hadoop分布式計算平臺

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

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

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

2.2 基于MapReduce的網絡爬蟲系統的設計

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

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節中設計的通用爬蟲MapReduce化,這樣就可以將免登錄抓取微博數據的任務分配給多臺普通計算機共同并行完成,大大加快了數據采集速度。

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

Map過程:

輸入:HBase中的用戶ID;

輸出:用戶所發微博文本;

1.map(ImmutableBytesWritable key, Result value){

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

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

4. crawl html without login from url;

5. get data from html;

6. save data to HBase;

7.}

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

1.main(){

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

3. create job(configuration); //根據配置建立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.}

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

3 實驗與分析

3.1 實驗環境

實驗硬件: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

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

3.2 實驗結果與分析

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

表3 兩種爬蟲穩定性比較

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

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

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

表4 兩種爬蟲與官方API數據完整性對比

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

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

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

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

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

4 結束語

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

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

猜你喜歡
數據庫用戶設計
瞞天過海——仿生設計萌到家
藝術啟蒙(2018年7期)2018-08-23 09:14:18
設計秀
海峽姐妹(2017年7期)2017-07-31 19:08:17
有種設計叫而專
Coco薇(2017年5期)2017-06-05 08:53:16
數據庫
財經(2017年2期)2017-03-10 14:35:35
關注用戶
商用汽車(2016年11期)2016-12-19 01:20:16
關注用戶
商用汽車(2016年6期)2016-06-29 09:18:54
數據庫
財經(2016年15期)2016-06-03 07:38:02
關注用戶
商用汽車(2016年4期)2016-05-09 01:23:12
數據庫
財經(2016年3期)2016-03-07 07:44:46
數據庫
財經(2016年6期)2016-02-24 07:41:51
主站蜘蛛池模板: 九九热在线视频| 无码中文字幕加勒比高清| 日韩大片免费观看视频播放| 亚洲天堂网在线观看视频| 日本AⅤ精品一区二区三区日| 欧美色99| 国内毛片视频| 日韩大片免费观看视频播放| 69综合网| 三级欧美在线| 国产欧美视频在线观看| 日韩国产欧美精品在线| 99久久精品国产麻豆婷婷| 亚洲精品无码AV电影在线播放| 亚洲国产综合自在线另类| 国产精品短篇二区| 欧美视频在线观看第一页| 丁香婷婷久久| 欧美国产在线看| 无码电影在线观看| 色悠久久久| 伊人久综合| 免费毛片全部不收费的| 天天色天天操综合网| 人妖无码第一页| 香蕉视频在线观看www| 青草午夜精品视频在线观看| 嫩草影院在线观看精品视频| 国产一区二区三区在线观看免费| 91在线视频福利| 91蜜芽尤物福利在线观看| 99热这里只有精品国产99| 国产va欧美va在线观看| 麻豆精品久久久久久久99蜜桃| 欧美区国产区| 伊人久久大香线蕉aⅴ色| a毛片免费观看| 亚洲Av激情网五月天| 亚洲无码日韩一区| 亚洲六月丁香六月婷婷蜜芽| 免费可以看的无遮挡av无码| 草逼视频国产| 久久美女精品| 99偷拍视频精品一区二区| a毛片免费看| 亚洲va视频| 亚洲高清日韩heyzo| 嫩草国产在线| 91精品国产丝袜| 91久久国产综合精品女同我| 91精品最新国内在线播放| 人人91人人澡人人妻人人爽| 国产在线一二三区| 亚洲va欧美ⅴa国产va影院| 在线观看视频99| 亚洲av无码人妻| 91福利免费视频| 91久久夜色精品| 亚洲成人高清无码| 一级黄色网站在线免费看| 国产欧美日韩综合在线第一| 欧美成人亚洲综合精品欧美激情| 日韩欧美综合在线制服| 91口爆吞精国产对白第三集| 国产成人久视频免费| 欧美日韩午夜| 伊人无码视屏| 午夜日本永久乱码免费播放片| 久久伊人操| 亚洲无码A视频在线| 国产毛片基地| 久久这里只有精品国产99| 国产精品福利导航| 国产在线精品99一区不卡| 国产第一福利影院| 一级爆乳无码av| 国产在线精品99一区不卡| 久久一色本道亚洲| 小蝌蚪亚洲精品国产| 伊人色在线视频| 色播五月婷婷| 欧美国产日韩另类|