版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Python爬蟲大數(shù)據(jù)采集與挖掘(6)
--Web信息提取與Python實(shí)現(xiàn)《Python爬蟲大數(shù)據(jù)采集與挖掘》第二版.微課視頻版(清華大學(xué)出版社,2025)教材《Python爬蟲大數(shù)據(jù)采集與挖掘》及配套公眾號(hào)
(當(dāng)當(dāng)、京東可購(gòu)書)提綱Web信息提取任務(wù)及要求Web頁(yè)面內(nèi)容提取的思路基于HTML結(jié)構(gòu)的內(nèi)容提取方法基于統(tǒng)計(jì)的Web內(nèi)容抽取方法基于JSON的web信息提取Web信息存儲(chǔ)Web信息提取包含Web頁(yè)面中的超鏈接提取和Web內(nèi)容提取兩大部分,都是網(wǎng)絡(luò)爬蟲技術(shù)的重要組成部分。前者是找出頁(yè)面中的所有超鏈接或符號(hào)一定規(guī)則的超鏈接,作為爬蟲的爬行任務(wù),在技術(shù)實(shí)現(xiàn)上比較簡(jiǎn)單。后者是從Web頁(yè)面中提取信息內(nèi)容,一般是指頁(yè)面中有意義的內(nèi)容,相應(yīng)的提取技術(shù)實(shí)現(xiàn)上比較復(fù)雜。WEB頁(yè)面中包含有豐富的信息內(nèi)容,對(duì)于互聯(lián)網(wǎng)大數(shù)據(jù)分析有用的信息可能是某個(gè)新聞報(bào)道頁(yè)面中的正文部分,也可能是某網(wǎng)絡(luò)論壇中的帖子信息、人際關(guān)系信息等。WEB頁(yè)面版式各式各樣,但可以歸結(jié)為以下若干種。新聞報(bào)道型頁(yè)面列表型頁(yè)面評(píng)論型頁(yè)面提綱Web信息提取任務(wù)及要求Web頁(yè)面內(nèi)容提取的思路基于HTML結(jié)構(gòu)的內(nèi)容提取方法基于統(tǒng)計(jì)的Web內(nèi)容抽取方法基于JSON的web信息提取Web信息存儲(chǔ)Web頁(yè)面它具有一定的結(jié)構(gòu),即由HTML標(biāo)簽構(gòu)成的樹型結(jié)構(gòu)。在進(jìn)行內(nèi)容提取時(shí)充分利用這種結(jié)構(gòu),再結(jié)合一定的搜索策略,可以快速獲得所需要的內(nèi)容??紤]到Web頁(yè)面經(jīng)常改版,這種基于結(jié)構(gòu)和搜索策略的方法具有比較高的適應(yīng)能力,使得程序容易維護(hù)。目前有多種HTML解析器的開源框架,大都集成了DOM樹的解析,并提供了靈活的方式來對(duì)樹進(jìn)行遍歷和搜索。與簡(jiǎn)單的標(biāo)簽Tag匹配不同,這種方法可以實(shí)現(xiàn)基于標(biāo)簽在樹中的特征來定位要抽取的信息內(nèi)容,從而可以方便完成頁(yè)面內(nèi)容的提取。DOM樹HTML文件中的標(biāo)簽構(gòu)成的樹是一種DOM樹,DOM是DocumentObjectModel的簡(jiǎn)稱,即文檔對(duì)象模型,提供了一種面向?qū)ο竺枋鑫臋n的方式。BeautifulSoup等各種HTML解析器對(duì)DOM標(biāo)準(zhǔn)中的屬性和方法進(jìn)行了實(shí)現(xiàn)和封裝,為程序開發(fā)人員提供Java、Python等不同語(yǔ)言的接口調(diào)用,使得Web信息內(nèi)容的提取變得更加方便。但是,如果自己要從底層編寫Web信息提取程序,就需要根據(jù)HTMLDOM定義的這些標(biāo)準(zhǔn)來實(shí)現(xiàn)。提取方法在進(jìn)行WEB頁(yè)面信息提取時(shí),一般有兩種場(chǎng)景。一種是,針對(duì)特定的網(wǎng)站,可以假定頁(yè)面的標(biāo)簽結(jié)構(gòu)特征是已知的。這種場(chǎng)景一般是,爬蟲抓取的頁(yè)面數(shù)量不是很多,而且頁(yè)面不常改版。另一種是,不針對(duì)特定網(wǎng)站,頁(yè)面的標(biāo)簽結(jié)構(gòu)是無(wú)法實(shí)現(xiàn)確定的。對(duì)于網(wǎng)絡(luò)爬蟲應(yīng)用來說,這種場(chǎng)景一般有兩種情況。一是,爬蟲抓取大量不同Web頁(yè)面而無(wú)法逐個(gè)分析其標(biāo)簽結(jié)構(gòu);二是,Web頁(yè)面經(jīng)常改版,以至于標(biāo)簽結(jié)構(gòu)需要經(jīng)常修改。Web信息提取的三種基本思路是:1.基于字符串匹配的Web信息提取方法2.基于HTML結(jié)構(gòu)的Web信息提取方法3.基于統(tǒng)計(jì)的Web信息提取方法基于結(jié)構(gòu)的方法其基本思路描述如下:(1)通過HTML解析器將Web文檔解析成DOM樹;(2)確定要提取的正文在DOM樹中的哪個(gè)節(jié)點(diǎn)下,并且節(jié)點(diǎn)名稱和屬性具有惟一性;(3)通過各種方法定位到該節(jié)點(diǎn),將節(jié)點(diǎn)中所包含的內(nèi)容提取出來。其中,第二個(gè)步驟是通過人工方式分析頁(yè)面結(jié)構(gòu),例如上節(jié)的HTML例子中,標(biāo)題字符串是在title節(jié)點(diǎn)下,而title在整個(gè)HTML文檔中具有惟一性,因此可以作為提取的依據(jù)。在第三個(gè)步驟中,如果無(wú)法找到具有惟一性的節(jié)點(diǎn),則需要采用各種復(fù)雜的搜索策略。提綱Web信息提取任務(wù)及要求Web頁(yè)面內(nèi)容提取的思路基于HTML結(jié)構(gòu)的內(nèi)容提取方法基于統(tǒng)計(jì)的Web內(nèi)容抽取方法基于JSON的web信息提取Web信息存儲(chǔ)在Python中已經(jīng)有很多種開源庫(kù)可以用于實(shí)現(xiàn)基于HTML結(jié)構(gòu)的信息提取。這些開源庫(kù)完成了DOM樹的構(gòu)建,并給開發(fā)人員提供了豐富的搜索策略,可以靈活方便地實(shí)現(xiàn)Web信息提取。這些開源庫(kù)主要有html.parser、lxml、html5lib、BeautifulSoup以及PyQuery等。開源庫(kù)優(yōu)點(diǎn)缺點(diǎn)html.parserPython自帶的解釋器,執(zhí)行速度適中、文檔容錯(cuò)能力強(qiáng)對(duì)于某些python版本的兼容性不好lxml文檔容錯(cuò)能力較好,唯一支持HTML和XML的解析器。大部分源碼基于C語(yǔ)言的實(shí)現(xiàn),因此速度快。需要安裝C語(yǔ)言庫(kù)html5lib兼容性好、容錯(cuò)性好、以瀏覽器的方式解析文檔、生成HTML5格式的文檔、不依賴外部擴(kuò)展速度慢、需要額外的python支持BeautifulSoup可以選擇最合適的解析器來解析HTML文檔,使用方便速度偏慢PyQuery比較簡(jiǎn)單,而且其支持的css選擇器的功能比較強(qiáng)大。pyQuery和jQuery的語(yǔ)法很像,易上手
不同解釋器的聯(lián)系html.parser是Python中的自帶的標(biāo)準(zhǔn)類,可以用來對(duì)HTML/XHTML編碼的文本文件進(jìn)行解析。該類的定義如下:classhtml.parser.HTMLParser(*,convert_charrefs=True)其中,參數(shù)convert_charrefs表示是否將所有的字符(除了script/style元素之外)引用自動(dòng)轉(zhuǎn)化為Unicode形式,Python3.5以后的默認(rèn)值是True。HTMLParser提供給開發(fā)人員的是一種事件驅(qū)動(dòng)的模式,對(duì)于給定的HTML文本輸入,HTMLParser提供了一系列的事件作為編程接口,這些事件就是前面定義的各種方法(method)。事件發(fā)生的順序按如下次序進(jìn)行:
handle_starttag->handle_data->handle_comment->handle_endtag
實(shí)例見教材lxmllxml包(Package)為開發(fā)人員提供了很強(qiáng)的功能來處理HTML和XML文檔,也是Python語(yǔ)言中最容易使用的庫(kù)之一。lxml是libxml2和libxslt兩個(gè)C語(yǔ)言庫(kù)的Python化綁定,它的獨(dú)特之處在于兼顧了這些庫(kù)的速度和功能完整性,同時(shí)還具有PythonAPI的調(diào)用。lxml中包含了以下一些重要的模塊(modules):lxml.etree:該模塊實(shí)現(xiàn)了文檔的擴(kuò)展ElementTreeAPI。lxml.html:處理HTML的工具集。lxml.builder:生成XML文檔的方法。lxml.cssselect:基于XPath的CSS選擇器。在使用lxml進(jìn)行Web信息提取時(shí),最主要的問題是如何進(jìn)行節(jié)點(diǎn)的定位。lxml提供了兩種方式,一是xpath,二是樹的遍歷函數(shù)。在程序設(shè)計(jì)時(shí)可以根據(jù)實(shí)際情況單獨(dú)使用或兩者一起使用。lxml庫(kù)中包含的主要模塊有:etree、html、cssselect等,在程序設(shè)計(jì)上主要的是三個(gè)步驟。表達(dá)式描述nodename表示某個(gè)具體的節(jié)點(diǎn)/根節(jié)點(diǎn)。//所有節(jié)點(diǎn),而不考慮它們的位置。.當(dāng)前節(jié)點(diǎn)..當(dāng)前節(jié)點(diǎn)的父節(jié)點(diǎn)xpathHtml5libhtml5lib是一個(gè)Ruby和Python用來解析HTML文檔的類庫(kù),支持HTML5以及最大程度兼容桌面瀏覽器。html5lib包中包含了constants、html5parser、serializer三個(gè)模塊以及filters、treebuilders、treewalkers和treeadapters四個(gè)子包(Subpackages)。html5parser中定義的HTMLParser類對(duì)于解析HTML而言是比較重要的,它的聲明如下是:html5lib.html5parser.HTMLParser(tree=None,strict=False,namespaceHTMLElements=True,debug=False)程序設(shè)計(jì)方法(1)直接通過html5lib執(zhí)行parse方法,該方法返回一顆解析好的etree,然后就可以etree的xpath方法來指定要提取的內(nèi)容的路徑,從而獲取信息。(2)如果要處理的頁(yè)面比較多,使用第一種方法需要重復(fù)些parse方法的一些同樣參數(shù),為此,可以先使用html5lib.HTMLParser構(gòu)造一個(gè)解析器,然后執(zhí)行該解析器的parse方法去處理不同頁(yè)面。(3)有時(shí)候,要提取的信息難于用xpath的路徑來表達(dá),例如要提取Web頁(yè)面中所有超鏈接時(shí),針對(duì)每個(gè)超鏈接寫一個(gè)路徑固然可以,但是編程效率太低。這種情況下可以利用etree的模式匹配能力,運(yùn)用findall等方法從HTML文檔中找出所有符合條件的標(biāo)簽。(4)對(duì)于html5lib來說,其最大的優(yōu)勢(shì)在于具備處理不完整、不規(guī)范、有錯(cuò)誤標(biāo)簽的HTML文檔,能夠進(jìn)行自動(dòng)修復(fù),因此在一些場(chǎng)合下使用html5lib進(jìn)行Web頁(yè)面信息提取具有一定優(yōu)勢(shì)。BeautifulSoupBeautifulSoup是一個(gè)可以從HTML或XML文件中提取數(shù)據(jù)的Python庫(kù),目前最新版本為BeautifulSoup4.7.1,簡(jiǎn)稱為bs4,即BeautifulSoup4。bs4是一個(gè)包(package),其中包含了BeautifulSoup、EntitySubstitution、builder、AnnouncingParser等類。這些類中,BeautifulSoup使用得最多,因此很多人就認(rèn)為BeautifulSoup和bs4是一樣,但其實(shí)不然。BeautifulSoup將HTML文檔轉(zhuǎn)換成一個(gè)樹形結(jié)構(gòu),盡管結(jié)構(gòu)上可能比較復(fù)雜,但是從程序設(shè)計(jì)角度看,只要處理四種類型的Python對(duì)象:Tag、NavigableString、BeautifulSoup和Comment。建議重點(diǎn)掌握CSS選擇器這種方式使用select方法,允許通過標(biāo)簽名、類名、id名、以及組合查找、子標(biāo)簽查找。在查找時(shí),最重要的模式是由標(biāo)簽名、類名、id和子標(biāo)簽組成。標(biāo)簽名不加修飾,類名前加點(diǎn),id名前加#,子標(biāo)簽通過>或空格定義。相比于xpath,CSS也提供了很簡(jiǎn)潔的選擇方式,在Web信息提取中廣泛應(yīng)用。一些例子如下:soup.select('title')#通過標(biāo)簽名soup.select('.sister')#通過類名查找soup.select('#link1')#通過id名查找soup.select('p#link1')#組合查找soup.select("head>title")#直接子標(biāo)簽查找(>前后加空格)soup.select('.list>#link1')#class名稱為list的標(biāo)簽節(jié)點(diǎn)下id名稱為link1的子節(jié)點(diǎn)select方法返回的結(jié)果是list類型,可以通過下標(biāo)和text屬性來得到內(nèi)容,例如:soup.select('title')[0].text這個(gè)語(yǔ)句獲得頁(yè)面的title內(nèi)容。特別地,如果類名本身帶有空格,則應(yīng)該用點(diǎn)代替其中的空格,例如:對(duì)于<divclass="zwliclearfix">的選擇,應(yīng)該使用soup.select('div.zwli.clearfix')PyQueryPyQuery是一個(gè)主要的python庫(kù),它具有類似于JavaScript框架jQuery的功能。PyQuery使用lxml解析器在xml和html文檔上進(jìn)行操作,并提供了和jQuery類似的語(yǔ)法來解析HTML文檔,支持CSS選擇器,使用也非常方便。官方文檔在/pyquery/可查閱。實(shí)例見教材提綱Web信息提取任務(wù)及要求Web頁(yè)面內(nèi)容提取的思路基于HTML結(jié)構(gòu)的內(nèi)容提取方法基于統(tǒng)計(jì)的Web內(nèi)容抽取方法基于JSON的web信息提取Web信息存儲(chǔ)網(wǎng)站也會(huì)經(jīng)常升級(jí)改版,由此導(dǎo)致寫好的程度針對(duì)新版失效了。提取程序就需要有一定的智能性,能夠自動(dòng)識(shí)別某個(gè)WEB頁(yè)面上的正文位置,其前提是在沒有人工參與的情況下。其基本步驟如下:構(gòu)建HTML文檔對(duì)應(yīng)的DOM樹;基于某種特征來構(gòu)建基于DOM樹的信息提取規(guī)則;按照規(guī)則,從HTML中提取信息。規(guī)則的制定或生成方法有以下兩種。第一種,是通過啟發(fā)式方法。一般通過人工對(duì)HTML頁(yè)面進(jìn)行觀察和總結(jié),以DOM樹所確定的基本組成單位為規(guī)則中的特征,人工估計(jì)其對(duì)應(yīng)的特征值,從而形成啟發(fā)式規(guī)則。第二種,機(jī)器學(xué)習(xí)方法。這種方法通過人工選擇大量的HTML頁(yè)面,并對(duì)頁(yè)面中的正文區(qū)域進(jìn)行標(biāo)注,再由程序計(jì)算正文節(jié)點(diǎn)中各種特征對(duì)應(yīng)的特征值,以及其他類型節(jié)點(diǎn)對(duì)應(yīng)的特征值。從而將正文節(jié)點(diǎn)的判斷轉(zhuǎn)換成為一個(gè)分類問題,即根據(jù)某些特征及特征值,判斷節(jié)點(diǎn)是否為正文。這樣的問題顯然合適于機(jī)器學(xué)習(xí)方法來解決。提綱Web信息提取任務(wù)及要求Web頁(yè)面內(nèi)容提取的思路基于HTML結(jié)構(gòu)的內(nèi)容提取方法基于統(tǒng)計(jì)的Web內(nèi)容抽取方法基于JSON的web信息提取Web信息存儲(chǔ)許多商品評(píng)論是以JSON形式從服務(wù)器返回給客戶端的,例如,京東的商品評(píng)論是JSON格式的字符串,如下:這種情況下,就不是解析HTML了,而是解析JSON以獲得結(jié)構(gòu)化數(shù)據(jù)。JSON的全稱是JavaScriptObjectNotati
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 中藥師崗位職責(zé)制度
- 專利標(biāo)引制度
- 機(jī)加工行車安全培訓(xùn)課件
- 直腸癌放療患者的護(hù)理創(chuàng)新方法
- 2025-2030中國(guó)PTFE微粉市場(chǎng)運(yùn)行監(jiān)測(cè)與未來行情走勢(shì)預(yù)測(cè)研究報(bào)告
- 2026中國(guó)空氣表面消毒行業(yè)運(yùn)行態(tài)勢(shì)與投資趨勢(shì)預(yù)測(cè)報(bào)告
- 2025-2030綜合零售產(chǎn)業(yè)行業(yè)現(xiàn)狀全面調(diào)研及市場(chǎng)發(fā)展趨勢(shì)與資源配置報(bào)告
- 2025-2030中國(guó)垃圾處置設(shè)施市場(chǎng)消費(fèi)趨勢(shì)與多元化銷售渠道研究報(bào)告
- 東莞市中堂鎮(zhèn)公開招聘編外聘用人員20人備考題庫(kù)及參考答案詳解1套
- 2026年重慶醫(yī)科大學(xué)編外聘用人員招聘?jìng)淇碱}庫(kù)及完整答案詳解一套
- 2025年事業(yè)單位面試心理素質(zhì)測(cè)試模擬試卷及答案
- 2025-2030疫苗冷鏈物流體系建設(shè)標(biāo)準(zhǔn)與第三方服務(wù)市場(chǎng)機(jī)會(huì)報(bào)告
- 2025年江蘇省事業(yè)單位招聘考試教師招聘體育學(xué)科專業(yè)知識(shí)試卷(秋季篇)
- 2025年中國(guó)橡膠粉改性瀝青(AR)行業(yè)市場(chǎng)分析及投資價(jià)值評(píng)估前景預(yù)測(cè)報(bào)告
- 【完整版】2025年自考《馬克思基本原理概論》真題及答案
- 胸外科圍手術(shù)期護(hù)理指南
- 大數(shù)據(jù)中心建設(shè)項(xiàng)目標(biāo)準(zhǔn)與工程造價(jià)指標(biāo)分析
- 河北省五個(gè)一名校聯(lián)盟金太陽(yáng)2025屆高三上學(xué)期一輪收官驗(yàn)收-英語(yǔ)試卷(含答案)
- 2025年中山城市建設(shè)集團(tuán)有限公司“鴻鵠”專項(xiàng)人才引進(jìn)筆試參考題庫(kù)附帶答案詳解
- 數(shù)據(jù)處理專員工作總結(jié)
- 2025年上海市普陀區(qū)曹楊二中高三英語(yǔ)第一學(xué)期期末達(dá)標(biāo)檢測(cè)試題
評(píng)論
0/150
提交評(píng)論