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

        ?

        基于Python的數(shù)據(jù)信息爬蟲(chóng)技術(shù)

        2018-06-19 03:19:48西安工業(yè)大學(xué)魏程程
        電子世界 2018年11期
        關(guān)鍵詞:解析器爬蟲(chóng)管理器

        西安工業(yè)大學(xué) 魏程程

        1.引言

        隨著互聯(lián)網(wǎng)時(shí)代的迅速發(fā)展,Web已成為大量信息的載體,如何能從中有效地提取并利用這些信息成為一個(gè)巨大的挑戰(zhàn)。用戶通過(guò)訪問(wèn)Web檢索信息的工具一般都是傳統(tǒng)的搜索引擎,而其具有一定的局限性,比如說(shuō),不同領(lǐng)域、不同背景的用戶往往具有不同的檢索目的和需求,而傳統(tǒng)的搜索引擎所返回的結(jié)果往往包含大量用戶不關(guān)心的網(wǎng)頁(yè)。為了解決這類(lèi)問(wèn)題,爬蟲(chóng)技術(shù)應(yīng)運(yùn)而生。

        利用c++和java進(jìn)行爬蟲(chóng)的程序代碼,c++代碼復(fù)雜性高,而且可讀性、可理解性較低,不易上手,一般比較適合資深程序員編寫(xiě),來(lái)加深對(duì)c++語(yǔ)言的理解,不合適初學(xué)者學(xué)習(xí)。Java的可讀性適中,但是代碼冗余較多,同樣一個(gè)爬蟲(chóng),java的代碼量可能是Python的兩倍。Python作為一種語(yǔ)法簡(jiǎn)潔、面向?qū)ο蟮慕忉屝哉Z(yǔ)言,其便捷性、容易上手性受到眾多程序員的青睞,本文主要介紹如何利用python進(jìn)行網(wǎng)站數(shù)據(jù)的抓取工作,即網(wǎng)絡(luò)爬蟲(chóng)技術(shù)。

        2.網(wǎng)絡(luò)爬蟲(chóng)技術(shù)

        網(wǎng)絡(luò)爬蟲(chóng)[1],也叫網(wǎng)絡(luò)蜘蛛(Web Spider),如果把互聯(lián)網(wǎng)比喻成一個(gè)蜘蛛網(wǎng),數(shù)據(jù)便是存放于蜘蛛網(wǎng)的各個(gè)節(jié)點(diǎn),而爬蟲(chóng)就是一只小蜘蛛,沿著網(wǎng)絡(luò)抓取自己的獵物(數(shù)據(jù))。爬蟲(chóng)指的是:向網(wǎng)站發(fā)起請(qǐng)求,獲取資源后分析并提取有用數(shù)據(jù)的程序;從技術(shù)層面來(lái)說(shuō)就是通過(guò)程序模擬瀏覽器請(qǐng)求站點(diǎn)的行為,把站點(diǎn)返回的HTML代碼/JSON數(shù)據(jù)/二進(jìn)制數(shù)據(jù)(圖片、視頻)爬到本地,進(jìn)而提取自己需要的數(shù)據(jù),存放起來(lái)使用。簡(jiǎn)單的爬蟲(chóng)架構(gòu)如圖1所示。

        圖1 爬蟲(chóng)架構(gòu)圖

        爬蟲(chóng)調(diào)度器是用來(lái)啟動(dòng)、執(zhí)行、停止爬蟲(chóng),或者監(jiān)視爬蟲(chóng)中的運(yùn)行情況;在爬蟲(chóng)程序中有三個(gè)核心模塊:URL管理器,是用來(lái)管理待爬取URL數(shù)據(jù)和已爬取URL數(shù)據(jù);網(wǎng)頁(yè)下載器,是將URL管理器里提供的一個(gè)URL對(duì)應(yīng)的網(wǎng)頁(yè)下載下來(lái),存儲(chǔ)為一個(gè)字符串,這個(gè)字符串會(huì)傳送給網(wǎng)頁(yè)解析器進(jìn)行解析;網(wǎng)頁(yè)解析器,一方面會(huì)解析出有價(jià)值的數(shù)據(jù),另一方面,由于每一個(gè)頁(yè)面都有很多指向其它頁(yè)面的網(wǎng)頁(yè),這些URL被解析出來(lái)之后,可以補(bǔ)充進(jìn)URL管理器。這三部分就組成了一個(gè)簡(jiǎn)單的爬蟲(chóng)架構(gòu),這個(gè)架構(gòu)就能將互聯(lián)網(wǎng)中所有的網(wǎng)頁(yè)抓取下來(lái)。

        網(wǎng)絡(luò)爬蟲(chóng)的基本工作流程如下:

        ● 首先選取一部分URL作為種子URL;

        ● 將這些種子URL加入待抓取集合;

        ● 從待抓取的URL集合中取出待抓取的URL,解析DNS,并且得到主機(jī)的ip,并將URL對(duì)應(yīng)的網(wǎng)頁(yè)下載下來(lái),存儲(chǔ)進(jìn)已下載網(wǎng)頁(yè)庫(kù)中。此外,將這些URL放進(jìn)已抓取的URL集合;

        ● 分析已抓取URL集合中的URL,分析其中的其他URL,并且將URL放入待抓取URL集合,從而進(jìn)入下一個(gè)循環(huán);

        ● 解析下載下來(lái)的網(wǎng)頁(yè),將需要的數(shù)據(jù)解析出來(lái);

        ● 數(shù)據(jù)持久化,保存至數(shù)據(jù)庫(kù)中。

        2.1 URL管理器

        URL管理器管理待抓取的URL集合和已抓取的URL集合,防止重復(fù)抓取和循環(huán)抓取,如圖2所示。

        圖2 URL管理器圖解

        URL管理器的實(shí)現(xiàn)方式有內(nèi)存、關(guān)系數(shù)據(jù)庫(kù)和緩存數(shù)據(jù)庫(kù)三種,內(nèi)存適合個(gè)人或小型企業(yè),如果想要永久存儲(chǔ)或是內(nèi)存不夠用,小型企業(yè)或個(gè)人可以選擇關(guān)系數(shù)據(jù)庫(kù),緩存數(shù)據(jù)庫(kù)由于其高性能,被大型互聯(lián)網(wǎng)公司青睞。

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

        網(wǎng)頁(yè)下載器作為爬蟲(chóng)的核心組件之一,是將Web上URL對(duì)應(yīng)的網(wǎng)頁(yè)下載到本地的工具。常用的Python網(wǎng)頁(yè)下載器有urllib2基礎(chǔ)模塊和requests第三方插件兩種。urllib2支持功能有:支持直接url下載;支持向網(wǎng)頁(yè)直接輸入的數(shù)據(jù);支持需要登陸網(wǎng)頁(yè)的cookie處理;需要代理訪問(wèn)的代理處理。

        urllib2有三種下載方法:

        1)直接下載法,這是最簡(jiǎn)潔的方法:urllib2.urlopen(url)。

        2)添加data和http,這里data即指用戶需要輸入的數(shù)據(jù),http-header主要是為了提交http的頭信息。將url、data、header三個(gè)參數(shù)傳遞給urllib2的Request類(lèi),生成一個(gè)request對(duì)象,接著再使用urllib2中的urlopen方法,以request作為參數(shù)發(fā)送網(wǎng)頁(yè)請(qǐng)求。

        3)添加特殊情境的處理器

        有些網(wǎng)頁(yè)需要登錄才能訪問(wèn),需要添加cookie進(jìn)行處理,這里使用HTTPCookieProcessor。

        需代理才能訪問(wèn)的使用:ProxyHandler

        使用https加密協(xié)議的網(wǎng)頁(yè):HTTPSHandler

        有的url相互自動(dòng)的跳轉(zhuǎn)關(guān)系:HTTPRedirectHandler

        將這些handler傳送給urllib2的build_opener(handler)方法來(lái)創(chuàng)建opener對(duì)象,在傳送給install_opener(opener),之后urllib2就具有了這些場(chǎng)景的處理能力。

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

        網(wǎng)頁(yè)解析器,簡(jiǎn)單的說(shuō)就是用來(lái)解析html網(wǎng)頁(yè)的工具,準(zhǔn)確的說(shuō):它是一個(gè)HTML網(wǎng)頁(yè)信息提取工具,就是從html網(wǎng)頁(yè)中解析提取出“我們需要的有價(jià)值的數(shù)據(jù)”或者“新的URL鏈接”的工具。

        常見(jiàn)的python網(wǎng)頁(yè)解析工具有:

        1)正則表達(dá)式:將整個(gè)網(wǎng)頁(yè)文檔當(dāng)作字符串,然后使用模糊匹配的方式,來(lái)提取出有價(jià)值的數(shù)據(jù)和新的url。其優(yōu)點(diǎn)是看起來(lái)比較直觀,但如果文檔比較復(fù)雜,這種解析方式會(huì)顯得很麻煩;

        2)html.parser:此為python自帶的解析器;

        3)lxml:第三方插件解析器,可解析html和xml網(wǎng)頁(yè);

        4)Beautiful Soup:強(qiáng)大的第三方插件解析器,可使用html.parser和lxml解析器。

        以上這四種網(wǎng)頁(yè)解析器,是兩種不同類(lèi)型的解析器,其中re正則表達(dá)式即為字符串式的模糊匹配模式;BeautifulSoup、html.parser與lxml為“結(jié)構(gòu)化解析”模式,他們都以DOM樹(shù)結(jié)構(gòu)為標(biāo)準(zhǔn),進(jìn)行標(biāo)簽結(jié)構(gòu)信息的提取。而所謂結(jié)構(gòu)化解析,就是網(wǎng)頁(yè)解析器它會(huì)將下載的整個(gè)HTML文檔當(dāng)成一個(gè)Doucment對(duì)象,然后在利用其上下結(jié)構(gòu)的標(biāo)簽形式,對(duì)這個(gè)對(duì)象進(jìn)行上下級(jí)的標(biāo)簽進(jìn)行遍歷和信息提取操作。

        下來(lái)我們重點(diǎn)學(xué)習(xí)一下BeautifulSoup,它是一個(gè)可以從HTML或XML文件中提取數(shù)據(jù)的Python第三方庫(kù),它能夠通過(guò)你喜歡的轉(zhuǎn)換器實(shí)現(xiàn)慣用的文檔導(dǎo)航,查找,修改文檔的方式。Beautiful Soup會(huì)幫你節(jié)省數(shù)小時(shí)甚至數(shù)天的工作時(shí)間,其使用方法如下:

        第一步:創(chuàng)建BeautifulSoup對(duì)象(即DOM對(duì)象)。

        第二步:搜索節(jié)點(diǎn)(find_all,find)。

        搜索節(jié)點(diǎn)方法:

        soup.find_all() --- 查找所有符合查詢條件的標(biāo)簽節(jié)點(diǎn),并返回一個(gè)列表。

        soup.find() --- 查找符合符合查詢條件的第一個(gè)標(biāo)簽節(jié)點(diǎn)。

        實(shí)例:查找所有標(biāo)簽符合標(biāo)簽名為a,鏈接符合 /view/123.html的節(jié)點(diǎn)。

        實(shí)現(xiàn)方法1:

        >>>> soup.find_all(‘a(chǎn)’, href = ‘/view/123.html’)

        實(shí)現(xiàn)方法2:

        >>>> soup.find_all(‘a(chǎn)’, href = re.compile(r’/view/d+.html’))

        第三步:訪問(wèn)節(jié)點(diǎn)信息。

        比如我們得到節(jié)點(diǎn):I love Python

        1)獲取節(jié)點(diǎn)名稱(chēng)

        >>>> node.name

        2)獲取查找到的a節(jié)點(diǎn)的href屬性

        >>>> node[‘href’]

        或者

        >>>> node.get(‘href’)

        3)獲取查找到的a節(jié)點(diǎn)的字符串內(nèi)容

        >>>> node.get_text()

        3.爬蟲(chóng)的抓取策略

        在爬蟲(chóng)系統(tǒng)中,待抓取URL隊(duì)列是很重要的一部分。待抓取URL隊(duì)列中的URL以什么樣的順序排列也是一個(gè)很重要的問(wèn)題,因?yàn)檫@涉及到先抓取那個(gè)頁(yè)面,后抓取哪個(gè)頁(yè)面。而決定這些URL排列順序的方法,叫做抓取策略。下面重點(diǎn)介紹幾種常見(jiàn)的抓取策略:

        圖3 抓取順序圖

        1)深度優(yōu)先策略(DFS)

        深度優(yōu)先策略是指爬蟲(chóng)從某個(gè)URL開(kāi)始,一個(gè)鏈接一個(gè)鏈接的爬取下去,直到處理完了某個(gè)鏈接所在的所有線路,才切換到其它的線路。此時(shí)抓取順序?yàn)椋篈 -> B -> C -> D -> E -> F -> G -> H -> I-> J(參考圖3)。

        2)廣度優(yōu)先策略(BFS)

        寬度優(yōu)先遍歷策略的基本思路是,將新下載網(wǎng)頁(yè)中發(fā)現(xiàn)的鏈接直接插入待抓取URL隊(duì)列的末尾。也就是指網(wǎng)絡(luò)爬蟲(chóng)會(huì)先抓取起始網(wǎng)頁(yè)中鏈接的所有網(wǎng)頁(yè),然后再選擇其中的一個(gè)鏈接網(wǎng)頁(yè),繼續(xù)抓取在此網(wǎng)頁(yè)中鏈接的所有網(wǎng)頁(yè)。此時(shí)抓取順序?yàn)椋篈 -> B -> E -> G-> H -> I -> C -> F -> J -> D(參考圖3)。

        4.小結(jié)

        本文介紹了基于Python的數(shù)據(jù)信息爬蟲(chóng)技術(shù)的工作流程,以及爬蟲(chóng)技術(shù)中的三大核心模塊的使用方法,為日后的研究工作奠定理論基礎(chǔ),對(duì)開(kāi)發(fā)設(shè)計(jì)網(wǎng)絡(luò)爬蟲(chóng)實(shí)例具有一定的指導(dǎo)意義。

        [1]Wesley J. Chun. Python核心編程[M].宋吉廣譯.北京:人民郵電出版社,2008.

        猜你喜歡
        解析器爬蟲(chóng)管理器
        利用網(wǎng)絡(luò)爬蟲(chóng)技術(shù)驗(yàn)證房地產(chǎn)灰犀牛之說(shuō)
        基于多解析器的域名隱私保護(hù)機(jī)制
        基于Python的網(wǎng)絡(luò)爬蟲(chóng)和反爬蟲(chóng)技術(shù)研究
        基于Wireshark的列控中心以太網(wǎng)通信協(xié)議解析器的研究與實(shí)現(xiàn)
        應(yīng)急狀態(tài)啟動(dòng)磁盤(pán)管理器
        Windows文件緩沖處理技術(shù)概述
        如何防御DNS陷阱?常用3種DNS欺騙手法
        利用爬蟲(chóng)技術(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ò)爬蟲(chóng)技術(shù)
        電子制作(2017年9期)2017-04-17 03:00:46
        中文字幕avdvd| 猫咪av成人永久网站在线观看| 亚洲av无码国产精品色软件下戴| 久久韩国漫画无删减漫画歪歪漫画| 国内精品视频成人一区二区| 99麻豆久久精品一区二区| 亚洲a无码综合a国产av中文| 玩弄放荡人妻少妇系列| 亚洲情a成黄在线观看动漫尤物| 亚洲精品国产二区在线观看| 午夜天堂一区人妻| 久久综合精品国产一区二区三区无码 | 日本做受120秒免费视频| 国产精品久久无码一区二区三区网| 国产成人啪精品视频免费网| 伊人久久亚洲精品中文字幕| 亚洲av无码国产综合专区| 国产大片内射1区2区| 欧美人与动人物牲交免费观看| 啪啪网站免费观看| 在线观看免费不卡网站| 免费观看18禁无遮挡真人网站| 国内精品一区二区三区| 一片内射视频在线观看| 亚洲av无一区二区三区| 久久久精品国产sm调教网站| 人妻在线中文字幕| av免费网站不卡观看| 欧洲美熟女乱av亚洲一区| 精品人妻一区二区三区四区| 香蕉亚洲欧洲在线一区| 亚洲国产综合精品中久| 国产精品久久久国产盗摄| 久久精品国产亚洲AⅤ无码| 国产av午夜精品一区二区入口| 日本熟妇人妻xxxx| 午夜福利电影| 久久青青草原亚洲AV无码麻豆| 人妻乱交手机在线播放| 99无码精品二区在线视频| 人妻人人澡人人添人人爽人人玩|