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

        ?

        基于Python的多線程網(wǎng)絡(luò)爬蟲的設(shè)計(jì)與實(shí)現(xiàn)

        2018-04-10 01:40:00◆孫
        關(guān)鍵詞:解析器爬蟲管理器

        ◆孫 冰

        ?

        基于Python的多線程網(wǎng)絡(luò)爬蟲的設(shè)計(jì)與實(shí)現(xiàn)

        ◆孫 冰

        (中國(guó)石油大學(xué)計(jì)算機(jī)與通信工程學(xué)院 山東 266580)

        本文主要詳細(xì)介紹如何應(yīng)用Python語(yǔ)言實(shí)現(xiàn)一個(gè)多線程的網(wǎng)絡(luò)爬蟲程序,并在此基礎(chǔ)上搭建特定的測(cè)試網(wǎng)站將串行爬蟲程序和多線程爬蟲程序的運(yùn)行效率進(jìn)行對(duì)比,進(jìn)而給出提高網(wǎng)絡(luò)爬蟲性能的具體方法。

        Python;網(wǎng)絡(luò)爬蟲;多線程

        0 引言

        隨著網(wǎng)絡(luò)技術(shù)的飛速發(fā)展,互聯(lián)網(wǎng)中的信息呈現(xiàn)爆炸式的增長(zhǎng),互聯(lián)網(wǎng)的信息容量也達(dá)到了一個(gè)前所未有的高度。為了方便人們獲取互聯(lián)網(wǎng)中的信息,國(guó)內(nèi)外出現(xiàn)了一批搜索引擎,如Google、百度、Yahoo等等。這些搜索引擎的特點(diǎn)是能盡量多地抓取網(wǎng)頁(yè)中的信息,因而容易忽略抓取到的頁(yè)面的語(yǔ)義和抓取到的順序等。檢索人需要投入大量時(shí)間和精力來(lái)完成一次檢索,必要時(shí)還需要反復(fù)組織自己的檢索語(yǔ)言,以達(dá)到檢索的效果。傳統(tǒng)的搜索引擎在返回的結(jié)果方面有局限性,網(wǎng)絡(luò)爬蟲因此而誕生。網(wǎng)絡(luò)爬蟲又名叫網(wǎng)絡(luò)機(jī)器人,它是一種按照特定規(guī)則爬取網(wǎng)頁(yè)信息的程序。與傳統(tǒng)搜索引擎不同,網(wǎng)絡(luò)爬蟲只爬取想要獲得的特定類型的信息,進(jìn)而提高搜索引擎的效率。

        傳統(tǒng)的搜索引擎通常由網(wǎng)頁(yè)搜集、預(yù)處理和查詢這三個(gè)模塊組成,而網(wǎng)絡(luò)爬蟲就存在于網(wǎng)頁(yè)搜集這個(gè)模塊之中,網(wǎng)絡(luò)爬蟲作為搜索引擎[1]的重要組件,它的主要功能就是爬取互聯(lián)網(wǎng)上各類信息。網(wǎng)絡(luò)爬蟲通常是一個(gè)應(yīng)用程序或者腳本,一般先給定一個(gè)入口URL地址,從入口URL開始根據(jù)一定的規(guī)則獲得這個(gè)初始網(wǎng)頁(yè)上的所有URL,再通過(guò)這些新的URL如此循環(huán)往復(fù)獲得更多的URL。在這些獲取到的URL中,按照我們需要信息的規(guī)則解析該網(wǎng)頁(yè),最后再根據(jù)不同的需求對(duì)獲取到的數(shù)據(jù)進(jìn)行處理。網(wǎng)絡(luò)爬蟲與傳統(tǒng)檢索方式對(duì)比如圖1所示。

        圖1 網(wǎng)絡(luò)爬蟲與傳統(tǒng)檢索方式對(duì)比圖

        理論上任何一種支持網(wǎng)絡(luò)通信的語(yǔ)言都可以用來(lái)編寫爬蟲程序,目前大多數(shù)網(wǎng)絡(luò)爬蟲程序是用后臺(tái)腳本語(yǔ)言來(lái)編寫,其中Python是最為廣泛使用的一種語(yǔ)言,其具有豐富和強(qiáng)大的標(biāo)準(zhǔn)庫(kù)供用戶選擇使用[2]。

        1 網(wǎng)絡(luò)爬蟲的設(shè)計(jì)實(shí)現(xiàn)

        本文采用簡(jiǎn)單的框架結(jié)構(gòu)來(lái)編寫爬蟲程序,分別有以下四個(gè)模塊[3]:URL管理器、網(wǎng)頁(yè)下載器、網(wǎng)頁(yè)解析器、網(wǎng)頁(yè)輸出器,這四個(gè)模塊共同完成抓取網(wǎng)頁(yè)的整個(gè)過(guò)程。

        (1)URL管理器

        URL管理器模塊的作用是管理待爬取的URL集合和已爬取過(guò)的URL集合。每個(gè)網(wǎng)頁(yè)爬取的信息,均包括一些指向其他網(wǎng)頁(yè)的URL,同樣其他網(wǎng)頁(yè)的信息中也包含指向本網(wǎng)頁(yè)的URL,因此不同的URL之間存在著一種循環(huán)指向的問題。如若對(duì)它置之不理,網(wǎng)絡(luò)爬蟲程序就會(huì)在這些URL之間循環(huán)抓取,比較嚴(yán)重的情況是兩個(gè)URL相互指向?qū)Ψ?,如果爬蟲程序一直在這兩個(gè)URL之間抓取信息,就會(huì)形成死循環(huán)。因此URL管理器有一個(gè)很重要的作用就是防止重復(fù)抓取和循環(huán)抓取網(wǎng)頁(yè)。

        (2)網(wǎng)頁(yè)下載器

        網(wǎng)頁(yè)下載器的主要功能把網(wǎng)頁(yè)對(duì)應(yīng)的URL下載到本地,它是整個(gè)爬蟲程序的核心組件。網(wǎng)頁(yè)下載器和瀏覽器相似,它從互聯(lián)網(wǎng)上下載URL對(duì)應(yīng)的網(wǎng)頁(yè),將其內(nèi)容按照HTML的格式下載,然后按照本地文件或者本地字符串的形式來(lái)存儲(chǔ),然后再進(jìn)行后續(xù)的分析處理。

        (3)網(wǎng)頁(yè)解析器

        將互聯(lián)網(wǎng)上的URL下載到本地后,需要通過(guò)網(wǎng)頁(yè)解析器對(duì)該URL進(jìn)行解析才能夠提取出所需要的內(nèi)容。簡(jiǎn)而言之,網(wǎng)頁(yè)解析器是從網(wǎng)頁(yè)中提取人們需要的數(shù)據(jù)的工具。從一個(gè)搜索引擎來(lái)看,網(wǎng)頁(yè)解析器首先會(huì)將網(wǎng)頁(yè)中所有的URL提取出來(lái),以便后續(xù)進(jìn)行訪問。本文所做的是一個(gè)定向爬蟲,除了將網(wǎng)頁(yè)中的待爬取的URL提取出來(lái)之外,還要將所需要和感興趣的數(shù)據(jù)提取出來(lái)。即是說(shuō)網(wǎng)頁(yè)解析器會(huì)把網(wǎng)頁(yè)下載器下載的HTML網(wǎng)頁(yè)文檔字符串作為輸入來(lái)提取出需要的內(nèi)容和未訪問過(guò)的待爬取的URL列表。

        (4)網(wǎng)頁(yè)輸出器

        網(wǎng)頁(yè)輸出器實(shí)際是網(wǎng)頁(yè)處理的一部分,抓取到網(wǎng)頁(yè)的數(shù)據(jù)后,利用網(wǎng)頁(yè)解析器提取出該網(wǎng)頁(yè)中需要的數(shù)據(jù),然后將這些數(shù)據(jù)寫入本地的一個(gè)HTML文件中。如果想要對(duì)抓取到的數(shù)據(jù)進(jìn)行其他的處理,就需要修改相應(yīng)的代碼,增加新的功能模塊。在本課題研究中,主要是將爬取到的網(wǎng)頁(yè)內(nèi)容存儲(chǔ)到本地的HTML文件中,網(wǎng)頁(yè)輸出器需要對(duì)外提供兩個(gè)方法,其主要的方法是實(shí)現(xiàn)寫入文件這個(gè)功能。

        網(wǎng)絡(luò)爬蟲運(yùn)行流程如圖2所示,由爬蟲的總調(diào)度程序來(lái)啟動(dòng)或停止爬蟲,查看爬蟲的運(yùn)行情況。在爬蟲程序中,URL管理器用來(lái)管理待爬取的URL列表和已經(jīng)爬取過(guò)的URL列表,從URL管理器中取出一個(gè)URL,判斷該URL是否被爬取過(guò),如果是未被爬取的URL,則將這個(gè)鏈接發(fā)送到網(wǎng)頁(yè)下載器。下載器下載由URL鏈接指向的網(wǎng)頁(yè),并將下載下來(lái)的內(nèi)容以字符串的形式存儲(chǔ)下來(lái),然后會(huì)把這個(gè)字符串提交到網(wǎng)頁(yè)解析器,由網(wǎng)頁(yè)解析器進(jìn)行解析,會(huì)解析出我們所需要的數(shù)據(jù)。同時(shí)每個(gè)頁(yè)面中都有指向其他頁(yè)面的鏈接,通過(guò)網(wǎng)頁(yè)解析器把它們都解析出來(lái)后,增添到URL管理器中。這三個(gè)部分共同構(gòu)成了一個(gè)循環(huán),只要有滿足條件的URL,程序就一直持續(xù)運(yùn)行。

        2 并行爬蟲程序的實(shí)現(xiàn)

        在串行網(wǎng)絡(luò)爬蟲的基礎(chǔ)上,可以實(shí)現(xiàn)多線程的網(wǎng)絡(luò)爬蟲程序,當(dāng)爬蟲開始執(zhí)行后,程序向網(wǎng)頁(yè)發(fā)送訪問網(wǎng)頁(yè)的請(qǐng)求,然后程序等待網(wǎng)頁(yè)作出響應(yīng)。等待時(shí)間越長(zhǎng),效率也就越低。當(dāng)程序采用多線程時(shí),交互消息期間的平均等待時(shí)間有所降低,可以提高數(shù)據(jù)抓取的效率。同樣給定一個(gè)入口URL,從這個(gè)入口URL的網(wǎng)頁(yè)頁(yè)面內(nèi)容之中解析出所有的URL鏈接。如果這些鏈接沒有被訪問過(guò),增添到待爬取URL的隊(duì)列中,然后再?gòu)拇廊〉腢RL列表中取出一條進(jìn)行訪問和解析。程序中需要增加一段創(chuàng)建線程池的代碼,一開始給定一個(gè)最大線程數(shù),每在待爬取的URL列表中取出一個(gè)URL時(shí)就添加一項(xiàng)任務(wù)入隊(duì)列,執(zhí)行任務(wù)時(shí),就從隊(duì)列中出取出一項(xiàng)任務(wù)并執(zhí)行。

        圖2 網(wǎng)絡(luò)爬蟲運(yùn)行流程圖

        3 實(shí)驗(yàn)設(shè)計(jì)與分析

        將網(wǎng)絡(luò)爬蟲程序的入口地設(shè)定為http://stackoverflow.com/questions網(wǎng)頁(yè),設(shè)定程序爬取1000個(gè)網(wǎng)頁(yè)就停止運(yùn)行,打印程序運(yùn)行的時(shí)間,將串行爬蟲程序和多線程爬蟲程序的運(yùn)行時(shí)間進(jìn)行對(duì)比。以爬取網(wǎng)頁(yè)的數(shù)量100、300、500、800、1000作為橫坐標(biāo),以爬蟲程序的運(yùn)行時(shí)間(單位為s)作為縱坐標(biāo),分別畫出不同的網(wǎng)頁(yè)規(guī)模下,線程個(gè)數(shù)分別為1、3、5、8、10、15的時(shí)候運(yùn)行時(shí)間的變化。折線圖如圖3所示。

        從圖3中可以得出下面幾點(diǎn)結(jié)論:

        當(dāng)爬取的網(wǎng)頁(yè)數(shù)量為100的時(shí)候,串行爬蟲程序的運(yùn)行時(shí)間和在不同線程個(gè)數(shù)下爬蟲的運(yùn)行時(shí)間相差不大。當(dāng)爬取的網(wǎng)頁(yè)數(shù)量為300和500時(shí),線程數(shù)量的增加也并沒有讓運(yùn)行時(shí)間有顯著性的提高。因此使用多線程的爬蟲程序一般也只是在網(wǎng)站規(guī)模大,爬取的網(wǎng)頁(yè)數(shù)量很多時(shí)才會(huì)有顯著的提升效率的作用。

        選定某一個(gè)網(wǎng)頁(yè)規(guī)模觀察數(shù)據(jù),會(huì)發(fā)現(xiàn)線程數(shù)增加的時(shí)候運(yùn)行的時(shí)間沒有降低反而增加,是因?yàn)榫€程之間進(jìn)行切換也需要耗費(fèi)時(shí)間。因此增加線程數(shù)量并不是絕對(duì)的提高線程,根據(jù)程序運(yùn)行的環(huán)境的不同,能夠提高爬蟲程序運(yùn)行效率的最大線程的個(gè)數(shù)也不相同。

        圖3 特定網(wǎng)頁(yè)規(guī)模下線程數(shù)—爬蟲運(yùn)行時(shí)間折線圖

        4 總結(jié)與展望

        通過(guò)本文的實(shí)驗(yàn)可以得出,在特定的條件下,通過(guò)增加爬蟲程序的線程數(shù)能夠提高網(wǎng)絡(luò)爬蟲的效率,但是在設(shè)置網(wǎng)絡(luò)爬蟲線程的時(shí)候也要考慮多種因素,比如說(shuō)過(guò)多線程之間的切換所耗費(fèi)的系統(tǒng)資源以及程序運(yùn)行時(shí)所在網(wǎng)絡(luò)情況[4],而且有的網(wǎng)站會(huì)限制下載的速度,線程的數(shù)量太多時(shí),大量線程訪問網(wǎng)頁(yè),某些線程會(huì)被掛起。后期可以考慮在多臺(tái)服務(wù)器上分布式[5]部署網(wǎng)絡(luò)爬蟲,實(shí)現(xiàn)分布式爬蟲之間的通信模式,進(jìn)而提高網(wǎng)絡(luò)爬蟲的效率。

        [1]薛建春.垂直搜索引擎中網(wǎng)絡(luò)蜘蛛的設(shè)計(jì)與實(shí)現(xiàn)[D].北京:中國(guó)地質(zhì)大學(xué)檢測(cè)技術(shù)與自動(dòng)化裝置自動(dòng)檢測(cè)及應(yīng)用, 2007.

        [2]姜彬彪, 黃凱林, 盧昱江等.基于Python的專業(yè)網(wǎng)絡(luò)爬蟲的設(shè)計(jì)與實(shí)現(xiàn)[J].企業(yè)科技與發(fā)展(企業(yè)科技創(chuàng)新版), 2016.

        [3][澳] Richard Lawson著,李斌譯.用Python編寫網(wǎng)絡(luò)爬蟲[M].人民郵電出版社, 2016.

        [4]陽(yáng)國(guó)貴, 姜波.線程切換開銷分析工具的設(shè)計(jì)與實(shí)現(xiàn)[J]. 計(jì)算機(jī)應(yīng)用, 2010.

        [5]王毅桐.分布式網(wǎng)絡(luò)爬蟲技術(shù)研究與實(shí)現(xiàn)[D].成都:電子科技大學(xué)信息安全, 2012.

        猜你喜歡
        解析器爬蟲管理器
        利用網(wǎng)絡(luò)爬蟲技術(shù)驗(yàn)證房地產(chǎn)灰犀牛之說(shuō)
        基于多解析器的域名隱私保護(hù)機(jī)制
        基于Python的網(wǎng)絡(luò)爬蟲和反爬蟲技術(shù)研究
        基于Wireshark的列控中心以太網(wǎng)通信協(xié)議解析器的研究與實(shí)現(xiàn)
        應(yīng)急狀態(tài)啟動(dòng)磁盤管理器
        Windows文件緩沖處理技術(shù)概述
        如何防御DNS陷阱?常用3種DNS欺騙手法
        利用爬蟲技術(shù)的Geo-Gnutel la VANET流量采集
        一種基于無(wú)關(guān)DNS的通信隱私保護(hù)技術(shù)研究
        電子世界(2018年14期)2018-04-15 16:14:25
        大數(shù)據(jù)環(huán)境下基于python的網(wǎng)絡(luò)爬蟲技術(shù)
        電子制作(2017年9期)2017-04-17 03:00:46
        国产午夜精品久久久久免费视 | 国产老熟女狂叫对白| 欧美综合区| 漂亮人妻被强中文字幕乱码| 日本一二三区在线观看视频| 一本一本久久aa综合精品| 午夜片无码区在线| 久久婷婷国产五月综合色| 日本视频一区二区三区在线观看 | 久久精品熟女亚洲av麻豆永永| 免费不卡在线观看av| 色综合无码av网站| 亚洲欧洲无码精品ⅤA| 日本在线观看一二三区| 好吊妞无缓冲视频观看| 国产一区二区三区四区五区vm| 日本一区二区三区小视频 | 中文字幕无线码一区二区| 久久久久亚洲av无码专区体验| 亚洲欧美日韩国产综合专区| av一区二区三区综合网站| av国产传媒精品免费| 丰满多毛少妇做爰视频| 亚洲女同一区二区久久| 亚洲悠悠色综合中文字幕| 粗壮挺进人妻水蜜桃成熟漫画| 欧美日韩区1区2区3区| 在线免费观看毛视频亚洲精品 | 在线亚洲精品一区二区三区| 色窝窝亚洲av网在线观看| 免费人成无码大片在线观看| 亚洲AV无码乱码精品国产草莓| 国产精品大片一区二区三区四区 | 国产av无码专区亚洲aⅴ| 日韩人妻精品视频一区二区三区 | 人妻少妇精品视中文字幕国语| 少妇高潮无码自拍| 人妻少妇中文字幕久久| 欧美日韩色另类综合| 中出高潮了中文字幕| av免费观看网站大全|