国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

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

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

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

1.引言

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

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

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

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

圖1 爬蟲架構(gòu)圖

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

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

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

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

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

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

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

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

2.1 URL管理器

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

圖2 URL管理器圖解

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

2.2 網(wǎng)頁下載器

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

urllib2有三種下載方法:

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

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

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

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

需代理才能訪問的使用:ProxyHandler

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

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

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

2.3 網(wǎng)頁解析器

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

常見的python網(wǎng)頁解析工具有:

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

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

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

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

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

下來我們重點(diǎn)學(xué)習(xí)一下BeautifulSoup,它是一個(gè)可以從HTML或XML文件中提取數(shù)據(jù)的Python第三方庫,它能夠通過你喜歡的轉(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’))

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

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

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

>>>> node.name

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

>>>> node[‘href’]

或者

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

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

>>>> node.get_text()

3.爬蟲的抓取策略

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

圖3 抓取順序圖

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

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

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

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

4.小結(jié)

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

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

猜你喜歡
爬蟲管理器網(wǎng)頁
利用網(wǎng)絡(luò)爬蟲技術(shù)驗(yàn)證房地產(chǎn)灰犀牛之說
基于Python的網(wǎng)絡(luò)爬蟲和反爬蟲技術(shù)研究
應(yīng)急狀態(tài)啟動(dòng)磁盤管理器
Windows文件緩沖處理技術(shù)概述
基于CSS的網(wǎng)頁導(dǎo)航欄的設(shè)計(jì)
利用爬蟲技術(shù)的Geo-Gnutel la VANET流量采集
基于URL和網(wǎng)頁類型的網(wǎng)頁信息采集研究
大數(shù)據(jù)環(huán)境下基于python的網(wǎng)絡(luò)爬蟲技術(shù)
網(wǎng)頁制作在英語教學(xué)中的應(yīng)用
高集成度2.5A備份電源管理器簡(jiǎn)化鋰離子電池備份系統(tǒng)