數(shù)據(jù)采集技術(shù)課件第3章 解析采集到的網(wǎng)頁(yè)_第1頁(yè)
數(shù)據(jù)采集技術(shù)課件第3章 解析采集到的網(wǎng)頁(yè)_第2頁(yè)
數(shù)據(jù)采集技術(shù)課件第3章 解析采集到的網(wǎng)頁(yè)_第3頁(yè)
數(shù)據(jù)采集技術(shù)課件第3章 解析采集到的網(wǎng)頁(yè)_第4頁(yè)
數(shù)據(jù)采集技術(shù)課件第3章 解析采集到的網(wǎng)頁(yè)_第5頁(yè)
已閱讀5頁(yè),還剩13頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

能力要求能通過(guò)學(xué)習(xí)本章知識(shí),掌握使用正則表達(dá)式解析網(wǎng)頁(yè)的方法。能通過(guò)學(xué)習(xí)本章知識(shí),掌握使用正則表達(dá)式解析網(wǎng)頁(yè)的方法。能通過(guò)學(xué)習(xí)本章知識(shí),掌握l(shuí)xml工具解析網(wǎng)頁(yè)的方法解析采集到的網(wǎng)頁(yè)解析采集到的網(wǎng)頁(yè)HTML網(wǎng)頁(yè)數(shù)據(jù)的解析、提取是Python網(wǎng)絡(luò)數(shù)據(jù)采集開發(fā)中的非常關(guān)鍵的步驟。HTML網(wǎng)頁(yè)的解析、提取有很多方法,本章將從3個(gè)方面進(jìn)行講解。前面已經(jīng)了解了網(wǎng)頁(yè)的結(jié)構(gòu)并且采集得到了網(wǎng)頁(yè)的數(shù)據(jù)和信息,下面將要介紹3種解析網(wǎng)頁(yè)數(shù)據(jù)的方法。首先是正則表達(dá)式,然后是流行的BeautifulSoup模塊,最后是強(qiáng)大的lxml模塊。1使用正則表達(dá)式解析2使用BeautifulSoup解析3使用lxml解析目錄4解析方法的優(yōu)缺點(diǎn)對(duì)比3.1使用正則表達(dá)式解析簡(jiǎn)單地說(shuō),正則表達(dá)式是一種可以用于模式匹配和替換的強(qiáng)大工具。在幾乎所有的基于UNIX/Linux系統(tǒng)的軟件工具中都可以找到正則表達(dá)式的痕跡,如Perl或PHP腳本語(yǔ)言。此外,JavaScript這種腳本語(yǔ)言也提供了對(duì)正則表達(dá)式的支持?,F(xiàn)在正則表達(dá)式已經(jīng)成為了一個(gè)通用的工具,被各類技術(shù)人員所廣泛使用。正則表達(dá)式是一個(gè)很強(qiáng)大的字符串處理工具,幾乎任何關(guān)于字符串的操作都可以使用正則表達(dá)式來(lái)完成。作為一個(gè)數(shù)據(jù)采集工作者,每天和字符串打交道,正則表達(dá)式更是不可或缺的技能,正則表達(dá)式在不同開發(fā)語(yǔ)言中的使用方式可能不一樣,不過(guò)只要學(xué)會(huì)了任意一門語(yǔ)言的正則表達(dá)式用法,其他語(yǔ)言中大部分也只是換了個(gè)函數(shù)的名稱而已,本質(zhì)都是一樣的。模式描述模式描述.匹配任意字符(不包括換行符)\A匹配字符串開始位置,忽略多行模式^匹配開始位置,多行模式下匹配每一行的開始\Z匹配字符串結(jié)束位置,忽略多行模式$匹配結(jié)束位置,多行模式下匹配每一行的結(jié)束\b匹配位于單詞開始或結(jié)束位置的空字符串*匹配前一個(gè)元字符0到多次\B匹配不位于單詞開始或結(jié)束位置的空字符串+匹配前一個(gè)元字符1到多次\d匹配一個(gè)數(shù)字,相當(dāng)于[0-9]?匹配前一個(gè)元字符0到1次\D匹配非數(shù)字,相當(dāng)于[^0-9]{m,n}匹配前一個(gè)元字符m到n次\s匹配任意空白字符,相當(dāng)于[\t\n\r\f\v]Python與正則表達(dá)式正則表達(dá)式是一個(gè)特殊的字符序列,它能幫助你方便地檢查一個(gè)字符串是否與某種模式匹配。Python自1.5版本就增加了re模塊,提供Perl風(fēng)格的正則表達(dá)式模式。re模塊使Python語(yǔ)言擁有全部的正則表達(dá)式功能。compile函數(shù)根據(jù)一個(gè)模式字符串和可選的標(biāo)志參數(shù)生成一個(gè)正則表達(dá)式對(duì)象。該對(duì)象擁有一系列方法用于正則表達(dá)式匹配和替換。Re模塊也提供了與這些方法功能完全一致的函數(shù)。這些函數(shù)使用一個(gè)模式字符串作為它們的第一個(gè)參數(shù)。下面主要介紹Python中常用的正則表達(dá)式處理函數(shù)。1.re.match函數(shù)2.re.search函數(shù)re.search函數(shù)用于掃描整個(gè)字符串并返回第一個(gè)成功的匹配。3.re.match與re.search的區(qū)別re.match只匹配字符串的開始位置,如果字符串開始不符合正則表達(dá)式,則匹配失敗,函數(shù)返回None;而re.search匹配整個(gè)字符串,直到找到一個(gè)匹配。1使用正則表達(dá)式解析2使用BeautifulSoup解析3使用lxml解析目錄4解析方法的優(yōu)缺點(diǎn)對(duì)比3.2使用BeautifulSoup解析什么是網(wǎng)頁(yè)解析器?簡(jiǎn)單地說(shuō),網(wǎng)頁(yè)解析器就是用來(lái)解析HTML網(wǎng)頁(yè)的工具,準(zhǔn)確地說(shuō):它是一個(gè)HTML網(wǎng)頁(yè)信息提取工具,就是從HTML網(wǎng)頁(yè)中解析提取出“需要的有價(jià)值的數(shù)據(jù)”或者“新的URL鏈接”的工具。Python有以下幾種網(wǎng)頁(yè)解析器:正則表達(dá)式、html.parser、BeautifulSoup、lxml。常見的Python網(wǎng)頁(yè)解析工具有:re正則匹配、Python自帶的html.parser模塊、第三方庫(kù)BeautifulSoup(重點(diǎn)學(xué)習(xí))以及l(fā)xm庫(kù)。BeautifulSoup第三方庫(kù)BeautifulSoup是一個(gè)可以從HTML或XML文件中提取數(shù)據(jù)的Python庫(kù)。它能夠通過(guò)你喜歡的轉(zhuǎn)換器實(shí)現(xiàn)慣用文檔導(dǎo)航、查找、修改文檔等操作。在基于Python的數(shù)據(jù)采集開發(fā)中,主要用到的是BeautifulSoup的查找提取功能,修改文檔方式很少用到??梢哉f(shuō),BeautifulSoup是一個(gè)非常流行的Python模塊。簡(jiǎn)單來(lái)說(shuō),BeautifulSoup是Python的一個(gè)庫(kù),最主要的功能是從網(wǎng)頁(yè)抓取數(shù)據(jù)。BeautifulSoup提供一些簡(jiǎn)單的、Python式的函數(shù)用來(lái)處理導(dǎo)航、搜索、修改分析樹等功能。它是一個(gè)工具箱,通過(guò)解析文檔為用戶提供需要抓取的數(shù)據(jù),因?yàn)楹?jiǎn)單,所以不需要多少代碼就可以寫出一個(gè)完整的應(yīng)用程序。BeautifulSoup自動(dòng)將輸入文檔轉(zhuǎn)換為Unicode編碼,輸出文檔轉(zhuǎn)換為utf-8編碼。不需要考慮編碼方式,除非文檔沒有指定一個(gè)編碼方式。這時(shí),BeautifulSoup就不能自動(dòng)識(shí)別編碼方式了。然后,僅僅需要說(shuō)明一下原始編碼方式就可以了。BeautifulSoup已成為和lxml、html6lib一樣出色的Python解析器,為用戶靈活地提供不同的解析策略或強(qiáng)勁的速度。安裝beautifulsoup4接下來(lái)介紹BeautifulSoup在Python網(wǎng)絡(luò)數(shù)據(jù)采集開發(fā)中的使用。該模塊可以解析網(wǎng)頁(yè),并提供定位內(nèi)容的便捷接口。如果還沒有安裝該模塊,可以使用下面的命令安裝其最新版本。pipinstallbeautifulsoup4BeautifulSoup發(fā)布時(shí)打包成Python2版本的代碼,在Python3環(huán)境下安裝時(shí),會(huì)自動(dòng)轉(zhuǎn)換成Python3的代碼,如果沒有一個(gè)安裝的過(guò)程,那么代碼就不會(huì)被轉(zhuǎn)換。如果代碼拋出了ImportError的異?!癗omodulenamedHTMLParser”,則表明你在Python3版本中執(zhí)行Python2版本的代碼。如果代碼拋出了ImportError的異?!癗omodulenamedhtml.parser”,則表明你在Python2版本中執(zhí)行Python3版本的代碼。如果遇到上述兩種情況,最好的解決方法是重新安裝beautifulsoup4。如果在ROOT_TAG_NAME=u'[document]'代碼處遇到SyntaxError"Invalidsyntax"錯(cuò)誤,需要將把bs4的Python代碼版本從Python2轉(zhuǎn)換到Python3,然后重新安裝bs4。python3setup.pyinstallBeautifulSoup語(yǔ)法3.BeautifulSoup語(yǔ)法使用BeautifulSoup的一般流程有3個(gè)步驟。(1)創(chuàng)建BeautifulSoup對(duì)象。(2)使用BeautifulSoup對(duì)象的操作方法find_all與find進(jìn)行解讀搜索,示例如下。>>>>soup.find_all('a')>>>>soup.find('a')1使用正則表達(dá)式解析2使用BeautifulSoup解析3使用lxml解析目錄4解析方法的優(yōu)缺點(diǎn)對(duì)比3.3使用lxml解析前面介紹了BeautifulSoup的用法,這個(gè)已經(jīng)是非常強(qiáng)大的庫(kù)了,不過(guò)還有一些比較流行的解析庫(kù),例如lxml,使用的是Xpath語(yǔ)法,同樣是效率比較高的解析方法。如果大家對(duì)BeautifulSoup使用不太習(xí)慣的話,可以嘗試下lxml。安裝lxmlPython標(biāo)準(zhǔn)庫(kù)中自帶了xml模塊,但是性能不夠好,而且缺乏一些人性化的API。相比之下,第三方庫(kù)lxml是用Cython實(shí)現(xiàn)的,而且增加了很多實(shí)用的功能,可謂網(wǎng)絡(luò)數(shù)據(jù)采集處理網(wǎng)頁(yè)數(shù)據(jù)的一件利器。lxml大部分功能都存在于lxml.etree中。pipinstalllxml也可以使用easy_install工具下載lxml模塊。Python3.x之后就集成了pip、easy_install等工具可以用來(lái)直接下載Python所需的模塊。但如果使用的是Python3.4.3,當(dāng)使用pip下載lxml,則會(huì)出現(xiàn)各種依賴問(wèn)題。1使用正則表達(dá)式解析2使用BeautifulSoup解析3使用lxml解析目錄4解析方法的優(yōu)缺點(diǎn)對(duì)比3.4解析方法的優(yōu)缺點(diǎn)對(duì)比推薦使用lxml作為解析器,因?yàn)樾矢?,不過(guò)在Python2.7.3之前的版本和Python3中3.2.2之前的版本,必須安裝lxml或html5lib,因?yàn)槟切㏄ython版本的標(biāo)準(zhǔn)庫(kù)中內(nèi)置的HTML解析方法不夠穩(wěn)定。解析器使用方法優(yōu)勢(shì)劣勢(shì)Python標(biāo)準(zhǔn)庫(kù)BeautifulSoup(markup,"html.parser")Python的內(nèi)置標(biāo)準(zhǔn)庫(kù);執(zhí)行速度適中;文檔容錯(cuò)能力強(qiáng)Python2.7.3or3.2.2)前的版本中文檔容錯(cuò)能力差lxmlHTML解析器BeautifulSoup(markup,"lxml")速度快;文檔容錯(cuò)能力強(qiáng)需要安裝C語(yǔ)言庫(kù)lxmlXML解析器BeautifulSoup(markup,["lxml","xml"])BeautifulSoup(markup,"xml")速度快;唯一支持XML的解析器需要安裝C語(yǔ)言庫(kù)html5libBeautifulSoup(markup,"

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論