• 
    

    
    

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

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

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

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

      1.引言

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

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

      2.網(wǎng)絡爬蟲技術

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

      圖1 爬蟲架構圖

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

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

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

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

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

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

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

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

      2.1 URL管理器

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

      圖2 URL管理器圖解

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

      2.2 網(wǎng)頁下載器

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

      urllib2有三種下載方法:

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

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

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

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

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

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

      有的url相互自動的跳轉關系:HTTPRedirectHandler

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

      2.3 網(wǎng)頁解析器

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

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

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

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

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

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

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

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

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

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

      搜索節(jié)點方法:

      soup.find_all() --- 查找所有符合查詢條件的標簽節(jié)點,并返回一個列表。

      soup.find() --- 查找符合符合查詢條件的第一個標簽節(jié)點。

      實例:查找所有標簽符合標簽名為a,鏈接符合 /view/123.html的節(jié)點。

      實現(xiàn)方法1:

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

      實現(xiàn)方法2:

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

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

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

      1)獲取節(jié)點名稱

      >>>> node.name

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

      >>>> node[‘href’]

      或者

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

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

      >>>> node.get_text()

      3.爬蟲的抓取策略

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

      圖3 抓取順序圖

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

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

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

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

      4.小結

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

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

      猜你喜歡
      解析器爬蟲管理器
      利用網(wǎng)絡爬蟲技術驗證房地產(chǎn)灰犀牛之說
      基于多解析器的域名隱私保護機制
      基于Python的網(wǎng)絡爬蟲和反爬蟲技術研究
      基于Wireshark的列控中心以太網(wǎng)通信協(xié)議解析器的研究與實現(xiàn)
      應急狀態(tài)啟動磁盤管理器
      Windows文件緩沖處理技術概述
      如何防御DNS陷阱?常用3種DNS欺騙手法
      利用爬蟲技術的Geo-Gnutel la VANET流量采集
      電子測試(2018年1期)2018-04-18 11:53:04
      一種基于無關DNS的通信隱私保護技術研究
      電子世界(2018年14期)2018-04-15 16:14:25
      大數(shù)據(jù)環(huán)境下基于python的網(wǎng)絡爬蟲技術
      電子制作(2017年9期)2017-04-17 03:00:46
      武平县| 长顺县| 吉木萨尔县| 瓦房店市| 化德县| 平顶山市| 德阳市| 吴忠市| 古交市| 崇义县| 鹤壁市| 平定县| 永济市| 克什克腾旗| 东山县| 进贤县| 龙陵县| 涪陵区| 南乐县| 天柱县| 长沙市| 武威市| 西林县| 交城县| 兰坪| 天峨县| 德格县| 郯城县| 隆回县| 璧山县| 瑞安市| 孟村| 无棣县| 桂东县| 阳谷县| 无为县| 泽库县| 衢州市| 中江县| 嵩明县| 德格县|