• 
    

    
    

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

      基于大數據的網絡數據采集研究與實踐

      2023-04-07 00:13:15霍英李小帆丘志敏李彥廷
      軟件工程 2023年4期
      關鍵詞:網絡爬蟲數據采集大數據

      霍英 李小帆 丘志敏 李彥廷

      關鍵詞:大數據;數據采集;網絡爬蟲

      中圖分類號:TP319 文獻標識碼:A

      1引言(Introduction)

      數據對企業(yè)經營、政府決策、社會動態(tài)分析等起著極其重要的作用,如何大規(guī)模、快速地采集數據已成為有效提取數據價值的先決條件,數據采集的效率直接決定了數據的有效性和及時性。在大數據時代背景下,如何從大數據中采集有用的信息是大數據分析至關重要的一個環(huán)節(jié),也是大數據分析的入口[1]。

      對于大多數用戶提出的與主題或領域相關的查詢需求,傳統的搜索引擎得到的結果往往不盡如人意,為了克服傳統的搜索引擎的不足,提高抓取資源的質量,面向主題的爬蟲即聚焦爬蟲應運而生,并且迅速成為爬蟲研究的熱點之一。隨著動態(tài)網頁技術的發(fā)展,網絡爬蟲遇到越來越多的困難,很多動態(tài)網頁根本無法搜索到[2],例如聊天室系統等,還有許多頁面必須登錄才可以查看,因此產生了智能爬蟲。但是,隨著人工智能、大數據挖掘等行業(yè)的興起,普通的單機版爬蟲已不能滿足行業(yè)發(fā)展的要求,因此又產生了分布式爬蟲,如分布式爬蟲框架SeimiCrawler、WebCollector、Scrapy等[3],相應也產生了大量爬蟲企業(yè)和軟件,如深圳數闊信息技術有限公司的八爪魚數據采集器、杭州云微數據信息有限公司的云微大數據、北京宏博知微科技有限公司的知微事件、北京微指數科技有限公司的微指數等。

      本文在微博大數據環(huán)境下,以輿情數據采集、用戶行為分析為應用背景,提出了一種爬蟲數據采集系統的設計與實現方案。該方案主要采用的是聚焦爬蟲和增量式爬蟲相結合,同時基于內容評價的爬行策略,對用戶給定的關鍵詞進行搜索,并在其發(fā)生變化時對相關的內容進行更新,從而實現數據采集的及時性和有效性。

      2 網絡數據采集技術(Network data collectiontechnology)

      網絡數據采集是指通過網絡爬蟲或網站公開API(Application Programming Interface,應用程序編程接口)等方式從網站上獲取數據信息,該方法可以將非結構化數據從網頁中抽取出來,將其存儲為統一的本地數據文件,并以結構化的方式存儲。

      2.1網絡爬蟲技術簡介

      網絡爬蟲[ 4 ]又稱為網頁蜘蛛、網絡機器人, 在FOAF(Friend-of-a-Friend,朋友的朋友)社區(qū)中被稱為網頁追逐者,是一種按照某種規(guī)則,自動抓取互聯網上信息的程序或腳本;它是搜索引擎中最重要的組成模塊,是輿情采集系統中最核心的部分,也是數據分析工程師必須掌握的一種工具。爬蟲主要解決的問題有兩個:一是如何有效獲取網頁內容。爬蟲在運行過程中會遇到各種反爬策略,如限制訪問頻率、header頭部信息校驗、JavaScript動態(tài)生成頁面、IP限制、驗證碼限制、登錄限制等一系列技術。在解決上述問題的情況下,還必須思考如何在短時間內獲得更多、更準確的信息。除此之外,在數據獲取的過程中還有一系列需要遵守的協議,如robots.txt協議。二是如何對獲取到的網頁進行數據的提取。網絡爬蟲首先根據搜索的目的建立待爬取URL隊列,并對這些URL所對應的網頁進行訪問,然后把從互聯網上抓取下來的資源進行校驗,從提取的新URL中獲取數據,直到URL隊列中的所有URL全部爬取完畢或滿足一定要求為止。

      2.2聚焦網絡爬蟲

      聚焦網絡爬蟲將爬取目標定位在與主題相關的頁面中,主要應用在對特定信息的爬取,并為某一類特定的人群提供服務[5]。聚焦網絡爬蟲的爬行策略分為基于內容評價的爬行策略、基于鏈接評價的爬行策略、基于增強學習的爬行策略、基于語境圖的爬行策略。

      2.3增量式網絡爬蟲

      增量式更新指的是在更新的時候只更新改變的地方,未改變的地方則不更新,只爬取內容發(fā)生變化的網頁或者新產生的網頁,能在一定程度上保證所爬取的網頁盡可能是新網頁。

      本文給出的爬蟲數據采集系統主要采用的是聚焦網絡爬蟲和增量式網絡爬蟲相結合,同時基于內容評價的爬行策略。

      3數據采集系統設計(Design of data acquisitionsystem)

      本文以輿情數據采集、用戶行為分析為應用背景,因此系統主要是通過采集用戶指定話題的微博,并對數據進行初步加工后,通過業(yè)務系統展示出來,能清晰直觀地體現某熱點話題的傳播速度,以及公眾對該事件的態(tài)度。系統處理流程如圖1所示。

      3.1系統處理流程

      從總體角度來看,微博輿情采集系統的主要工作流程如下:首先從微博采集數據,在獲取數據后,對其進行簡單的處理后[如數據結構化、HTML(超文本標記語言)標簽剔除、時間格式化、去重等]存入原始數據庫,然后定時從原始數據庫中抽取數據并生成結論化數據,寫入業(yè)務數據庫并通過Web頁面展示,讓用戶更加直觀地掌握微博上的輿情動態(tài)。

      由于微博平臺有數以億計的用戶,每天發(fā)布的消息不計其數,想要全部獲取不太可能,也沒有必要[6]。因此,數據采集過程是根據用戶輸入的關鍵字進行采集,并且只把轉發(fā)評論達到一定數量(評論、點贊、轉發(fā)任意一項達到閾值以上)的博文存入業(yè)務數據庫即可。

      3.2功能設計

      數據采集系統主要是為后期業(yè)務數據分析與展示提供數據支持,由于需要經常性修改,因此不需要太過復雜的交互功能,重點是提供基本的定時任務設置、日志分析、爬蟲監(jiān)控功能及爬蟲管理功能即可,其功能模塊如圖2所示。

      設置定時任務:用戶可自定義爬蟲任務計劃,系統默認24 h不間斷地采集當天數據。

      日志分析:可查看爬蟲爬取的數據條目、爬取速度、頁面請求錯誤、開始運行時間及最后一次請求頁面的時間等信息。

      爬蟲狀態(tài)監(jiān)控:可查看各個節(jié)點的爬蟲運行狀態(tài)。

      爬蟲集群管理:可開始和終止任意一個節(jié)點的爬蟲。

      3.3存儲設計

      由于關系型數據庫插入性能較差且對存儲的數據格式有要求,故爬蟲爬取的數據將使用非關系型數據庫Mongodb存儲。Mongodb的格式靈活,插入性能高,數據之間沒有耦合性,容易水平擴展,而且它不需要設計表結構,只需要指定相應的集合即可,非常適合大數據爬取數據的存儲。

      3.4搜索關鍵字功能設計

      通過定時掃描業(yè)務數據庫中的關鍵字表,獲得關鍵字后,檢索用戶自定義的關鍵字映射文件,即存儲該關鍵字同義詞的文件。該文件需用戶自行維護,并以“關鍵字.txt”的格式存儲在爬蟲所在的目錄下,若未定義則默認使用該關鍵字。例如,“新冠.txt”文件中存儲了“新冠,冠狀病毒,新冠肺炎,肺炎,新型冠狀病毒肺炎,Covid 19”,則使用這六個詞進行搜索,若未建立該文件,則將使用“新冠”進行搜索,并根據其搜索返回的結果,進行數據的采集和分類。

      4數據采集系統實現(Implementation of dataacquisition system)

      4.1技術方案

      Scrapy是一個基于Python開發(fā)的Web抓取框架,通過它可以方便地從Web頁面上提取結構化的數據,常常被用于數據挖掘、監(jiān)測和自動化測試[7],它良好的擴展性得到了大部分人的青睞,因為它是一個框架,所以任何人都可以根據需求修改它。

      Scrapy提供了一個可通過簡單的JsonAPI(應用程序接口)快速部署或控制爬蟲項目的軟件Scrapyd,然而其功能過于簡陋,并不能滿足大數據環(huán)境下實際應用的需求,因此系統實現上借用了Github上的一個基于Scrapyd的開源項目ScrapydWeb,其良好的用戶交互界面,可輕松地實現管理本系統應用的爬蟲項目,再在其基礎上安裝相應的插件、實現相關代碼即可。

      4.2對目標網站信息進行分析

      要對網站數據進行采集,需要先對相應的頁面進行分析,由于本系統是針對微博的數據進行采集,為保證數據的完整性,本研究對微博的三個不同版本的頁面[8][桌面端、移動端(觸屏版)、移動端(weibo.cn)]分別進行分析,并分別采集后再進行數據合并。

      4.2.1桌面端(s.weibo.com)頁面分析

      Chrome等瀏覽器可以方便地查看頁面的信息以及請求/響應信息,桌面端是微博三個版本中頁面最復雜、最難爬取的頁面,但是數據量是三個版本中最多的,高級查詢功能可以小時為單位查詢數據。

      分析請求的URL(Uniform Resoure Locator,統一資源定位器)地址比對不同時間段不同頁面的URL地址如圖3所示,得出URL的生成規(guī)則為“https://s.weibo.com/weibo?q=搜索關鍵字&typeall=1&suball=1×cope=custom:xxxx-xxxx-x:xxxx-xx-xx-x&Refer=g&page=頁數”。

      通過上文分析得出了URL的生成規(guī)則和響應頁面格式,接下來可通過Xpath(XML Path Language,XML路徑語言)提取數據。分析頁面的HTML文件(圖4)

      主要的Xpath表達式如下。

      1. region=response.selector. xpath ( ' //span[@class="ctips"][2]/text()').extract()[0]

      2. find_result=response.selector.xpath("http://div[@class='card card-no-result s-pt20b40']").extract()

      3. cur_page=response.selector.xpath('//div[@class="m-page"]//li[@class="cur"]/a/@href').extract()[0][-6:]

      4. page_urls=response.selector.xpath('//div[@class="m-page"]//li/a/@href').extract()

      5. item['weibo_id']=card.xpath(".//@mid").extract()[0]

      6. user_id=card.xpath(".//a[@class='name']/@href").extract()[0]

      7. item['user_id']=re.split("\?",re.split("/",user_id)[-1])[0]

      8. r.lpush("weibo_spider:start_urls","https://weibo.cn/{}/info".format(item['user_id']))

      9. origin_weibo_user_id=header+card.xpath(".//a[@class='name']/@href").extract()[1]

      10. item['origin_weibo_user_id']=re.split("/",origin_weibo_user_id)[-1]

      11. names=card.xpath(".//a[@class='name']/@nick-name").extract()

      12. urls=card.xpath(".//p[@class='from']/a[@target='_blank']/@href").extract()

      13.item['create_at']=card.xpath( ".//p[@class='from']/a[@target='_blank'][1]/text()").extract()[0]

      14. item['tool']=card.xpath(".//p[@class='from']/a[@rel='nofollow'][1]/text()").extract()[0]

      15. i t e m [ ' c r e a t e _ a t ' ] = c a r d . x p a t h ( " . / / p [ @class='from']/a[@target='_blank']/text()").extract()[0]

      16. item['tool']=card.xpath(".//p[@class='from']/a[@rel='nofollow']/text()").extract()[0]

      17. i t e m [ ' c o n t e n t ' ] = c a r d . x p a t h ( " . / / p [ @class='txt']").extract()[1]

      18. like_num=card.xpath(".//div[@class='cardact']//a[@action-type='feed_list_like']/em/text()").extract()[0]

      19. item['like_num']=int(re.findall(r"\d+\.?\d*",like_num)[0])

      20. repost_num=card.xpath(".//div[@class='cardact']//a[@action-type='feed_list_forward']/text()").extract()[0]

      21. item['repost_num']=int(re.findall(r"\d+\.?\d*",repost_num)[0])

      22. comment_num=card. xpath( ". //div[@class='card-act']//a[@action-type='feed_list_comment']/text()").extract()[0]

      提取到的數據格式如圖5所示。

      字段描述如圖6所示。

      4.2.2移動端(觸屏版)頁面分析

      觸屏版頁面抓包如圖7所示,頁面的數據是通過接口生成的,因此獲取數據更方便,其返回的是json格式的數據,但是它只能返回1,000條數據。由于提取數據方便,因此可以協助研究人員從桌面端獲取數據。桌面端提取數據困難,但是在獲得微博ID和用戶ID的情況下,研究人員可切換為觸屏版通過接口提取數據。通過分析接口可以得到用戶詳細信息的數據接口為“http://m.weibo/cn/profile/info?uid=用戶ID”,微博詳情頁的數據接口為https://m.weibo.cn/comments/hotflow?id=微博ID&微博ID+&max_id=max_id&max_id_type=0,只需解析json數據便可提取數據。

      提取的數據格式存儲后如圖8所示。

      4.2.3移動端(weibo.cn)頁面分析

      移動端頁面較為簡單,但其用戶的個人描述比觸屏版更全面,因此可通過上面提取到的用戶ID在移動端提取個人信息,其URL生成規(guī)則為https://weibo.cn/用戶ID/info。分析HTML頁面,如圖9所示,的標簽里的內容即為微博個人信息內容。通過Xpath表達式"http://div[@class="c"]"提取所有包含個人信息的div塊,再通過正則切割字符串[9]提取其詳細內容,并保存到數據原始數據庫中。

      提取到的數據格式如圖10所示。

      4.3 網絡爬蟲模塊

      網絡爬蟲模塊主要包括以下子模塊(各子模塊調度流程如圖11所示)。

      消息隊列模塊:主要用來存放初始的URL鏈接,以及后續(xù)提取到的URL鏈接,供爬蟲使用。

      調度器模塊:負責分發(fā)Request請求,并且對提取到的URL進行去重。

      下載器模塊:接收調度器下發(fā)的請求,從微博下載數據,即獲取微博的HTML頁面。

      爬蟲模塊:接收下載器下載到的HTML頁面,通過Xpath表達式和正則表達式提取網頁中的數據。

      中間件模塊:在調度器把Request請求分發(fā)給下載器時添加一些信息,如UA(User Agent,用戶代理),Cookie(儲存在用戶本地終端上的數據),meta等信息。

      4.3.1消息隊列模塊

      使用Redis(Remote Dictionary Server,遠程字典服務)存儲需要爬取的URL,可以多個爬蟲實例共享同一個消息隊列,從而實現分布式爬蟲,多個爬蟲可以依次從隊列中提取URL并記錄URL是否已請求過,使調度器模塊在調度時候能過濾掉重復的Requests請求,即實現不會多個爬蟲爬取同一個鏈接。

      4.3.2調度器模塊

      接收從Scrapy引擎發(fā)來的請求,壓入隊列,當引擎再次請求的時候返回給引擎,決定下次爬取的URL鏈接,Scrapy原生的隊列并不支持多個爬蟲實例共享一個隊列,當使用Scrapy-redis爬蟲后,運行方式如圖12所示。

      4.3.3中間件模塊

      位于Scrapy引擎和其他模塊之間的模塊,可分為爬蟲中間件、調度中間件、下載器中間件。負責引擎到各個模塊之間的請求和響應。這里主要實現Cookie中間件、IP(InternetProtocol,網際協議)代理中間件、UA中間件、重定向中間件(Redirect Middleware)等。

      Cookie中間件:從準備好的賬號池中隨機選取一個賬號,并把其傳入Request的meta域[包含了所有本次HTTP請求的Header信息,比如用戶IP地址和用戶Agent(代理)]中。

      IP代理中間件:從準備好的IP池中,隨機選取一個IP,并把其傳入Request的meta域中。

      UA中間件:從準備好的UA池中,隨機選取一個UA,并把其傳入Request的meta域中。

      重定向中間件:當Request請求響應錯誤代碼(418,302,403)時,重新發(fā)送Request請求。

      4.3.4下載器模塊

      下載網頁的內容(響應的HTML頁面),并將網頁內容返回給Spider(爬蟲)實例,其建立在名叫Twisted的高效異步模型上,這里表現為當其發(fā)出一個Request請求后,不必等待其返回的結果,而是繼續(xù)發(fā)起其他請求,當請求數據被返回時,通過調用回調函數處理響應的數據,整個過程中不會出現等待返回結果的情況。

      4.3.5爬蟲模塊

      從下載器返回的內容(請求得到的HTML頁面)中提取微博評論、微博詳細信息、用戶個人信息和下一次請求的URL鏈接等數據,即Item(Items類中包含的字段),必須在Spider目錄下編寫,繼承于RedisSpider類,當從下載器中獲得返回的內容后,通過Xpath表達式和正則表達式提取數據。

      5結論(Conclusion)

      通過本數據采集系統在網絡中的實際采集效果來看,微博的一個頁面最多有20 條微博信息,爬蟲每個頁面大概能爬取19 條數據,一分鐘可采集612條數據,單機日采集量約為88萬條。實際應用中,用戶還可根據需求自定義爬取數據的速度,也可以通過增加分布式爬蟲數量提升爬取數據量與速度。通過爬取的數據生成的結論化數據來看,也與預期結果一致。當采集的數據量過大時,在提升爬取數據量與爬取速度時,對于服務器的性能也有較高的要求,后期將在降數據規(guī)模算法方面進行進一步的優(yōu)化。

      作者簡介:

      霍英(1975-),女,博士,教授.研究領域:大數據與物聯網,社會網絡.

      李小帆(1996-),男,本科,工程師.研究領域:輿情處理.

      丘志敏(1973-),男,碩士,副教授.研究領域:社會網絡.

      李彥廷(1975-),男,博士,副教授.研究領域:輿情處理.

      猜你喜歡
      網絡爬蟲數據采集大數據
      煉鐵廠鐵量網頁數據獲取系統的設計與實現
      鐵路客流時空分布研究綜述
      基于廣播模式的數據實時采集與處理系統
      軟件工程(2016年8期)2016-10-25 15:54:18
      通用Web表單數據采集系統的設計與實現
      軟件工程(2016年8期)2016-10-25 15:52:53
      基于開源系統的綜合業(yè)務數據采集系統的開發(fā)研究
      基于大數據背景下的智慧城市建設研究
      科技視界(2016年20期)2016-09-29 10:53:22
      基于社會網絡分析的權威網頁挖掘研究
      主題搜索引擎中網絡爬蟲的實現研究
      淺析如何應對網絡爬蟲流量
      中國市場(2016年23期)2016-07-05 04:35:08
      新巴尔虎右旗| 昭苏县| 天长市| 西充县| 安康市| 门头沟区| 甘孜县| 盐城市| 娄烦县| 鹤山市| 金寨县| 商南县| 昆山市| 呈贡县| 绥滨县| 丹寨县| 安泽县| 定陶县| 蓝山县| 云浮市| 宁南县| 土默特右旗| 新龙县| 扎赉特旗| 望江县| 确山县| 余江县| 洛宁县| 建德市| 松溪县| 弋阳县| 阳朔县| 哈尔滨市| 望江县| 清镇市| 炉霍县| 保德县| 星座| 伊吾县| 郁南县| 贵州省|