版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 保安部個(gè)人工作總結(jié)
- 中學(xué)競(jìng)選班長(zhǎng)演講稿
- 中外名著《培根隨筆》讀后感
- 模板幼師課件教學(xué)課件
- 松鼠兒童課件教學(xué)課件
- 機(jī)動(dòng)車檢驗(yàn) 零氣源技術(shù)要求及測(cè)試方法 征求意見稿
- 綿綿土課件教學(xué)課件
- 2024浙江杭州市上城區(qū)望江街道社區(qū)衛(wèi)生服務(wù)中心編外招聘1人筆試備考題庫(kù)及答案解析
- 2025年高考語(yǔ)文復(fù)習(xí)知識(shí)清單第2章文學(xué)類文本閱讀(一)小說(shuō)專題06探究主旨、標(biāo)題、作者意圖(學(xué)生版+解析)
- 標(biāo)養(yǎng)室和試件管理制度 附表-標(biāo)準(zhǔn)養(yǎng)護(hù)室溫度、相對(duì)濕度測(cè)量記錄表
- 2024年四川省達(dá)州市中考英語(yǔ)試題含解析
- 金融求職自我介紹
- 標(biāo)志設(shè)計(jì)(全套課件88P)
- 2023年高考物理一輪復(fù)習(xí)練習(xí)題:靜電場(chǎng)及其應(yīng)用(含基礎(chǔ)、提升兩套)
- 鋰離子電池行業(yè)發(fā)展趨勢(shì)
- 第十八章 正比例函數(shù)和反比例函數(shù)(5類壓軸題專練)
- 單項(xiàng)式乘多項(xiàng)式教案
- 遼寧省大連市中山區(qū)2024-2025學(xué)年九年級(jí)上學(xué)期期中化學(xué)試題
- 天津市天津市紅橋區(qū)2024-2025學(xué)年八年級(jí)上學(xué)期10月期中英語(yǔ)試題
- 老舊房子改造合同模板
- 2024年云網(wǎng)安全應(yīng)知應(yīng)會(huì)考試題庫(kù)
評(píng)論
0/150
提交評(píng)論