《數(shù)據(jù)采集技術(shù)》課件-lxml 解析庫(kù)_第1頁(yè)
《數(shù)據(jù)采集技術(shù)》課件-lxml 解析庫(kù)_第2頁(yè)
《數(shù)據(jù)采集技術(shù)》課件-lxml 解析庫(kù)_第3頁(yè)
《數(shù)據(jù)采集技術(shù)》課件-lxml 解析庫(kù)_第4頁(yè)
《數(shù)據(jù)采集技術(shù)》課件-lxml 解析庫(kù)_第5頁(yè)
已閱讀5頁(yè),還剩20頁(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)介

lxml解析庫(kù)Contents知識(shí)目標(biāo)掌握l(shuí)xml使用方法技能目標(biāo)提高數(shù)據(jù)采集和處理能力素養(yǎng)目標(biāo)培養(yǎng)良好的信息素養(yǎng)和道德意識(shí)lxml庫(kù)lxml庫(kù)是Python的XML和HTML解析器主要用于解析和提取HTML或者XML格式的數(shù)據(jù),可以利用XPath語(yǔ)法快速地定位特定的元素或節(jié)點(diǎn)。lxml庫(kù)lxml庫(kù)是Python的XML和HTML解析器主要用于解析和提取HTML或者XML格式的數(shù)據(jù)。XPath語(yǔ)法特定元素或節(jié)點(diǎn)快速定位lxml庫(kù)lxml庫(kù)中大部分的功能都位于:lxml.etree模塊導(dǎo)入lxml.etree模塊的常見(jiàn)方式如下:fromlxmlimportetreelxml庫(kù)lxml庫(kù)的一些相關(guān)類(lèi)如下:類(lèi)說(shuō)明Element可以理解為XML的節(jié)點(diǎn)。ElementTree可以理解為一個(gè)完整的XML文檔樹(shù)。ElementPath可以理解為XPath,用于搜索和定位節(jié)點(diǎn)。lxml庫(kù)可以理解為XML的節(jié)點(diǎn)。Element類(lèi)是XML處理的核心類(lèi)示例:fromlxmlimportetreeroot=etree.Element('root')print(root)運(yùn)行結(jié)果:<Elementrootat0x17d1539e080>參數(shù)root表示節(jié)點(diǎn)的名稱lxml庫(kù)Element類(lèi)的相關(guān)操作,主要分為三個(gè)部分。通過(guò)tag屬性獲取節(jié)點(diǎn)的名稱,示例如下:節(jié)點(diǎn)操作節(jié)點(diǎn)屬性的操作節(jié)點(diǎn)內(nèi)文本的操作示例:fromlxmlimportetreeroot=etree.Element('root')print(root)print(root.tag)運(yùn)行結(jié)果:<Elementrootat0x17d1539e080>rootset(key,value)方法,是已有的節(jié)點(diǎn)添加屬性。調(diào)用該方法時(shí)可以傳入兩個(gè)參數(shù):第一個(gè)參數(shù)表示屬性的名稱第二個(gè)參數(shù)表示屬性的值示例:fromlxmlimportetreeroot=etree.Element('root')root.set('age','30')print(etree.tostring(root))運(yùn)行結(jié)果:b'<rootage="30"/>'用到了tostring()函數(shù),該函數(shù)可以將元素序列化為其XML樹(shù)的編碼字符串表示形式。lxml庫(kù)通過(guò)text、tail屬性或者xpath()方法來(lái)訪問(wèn)文本內(nèi)容。#給root節(jié)點(diǎn)添加文本示例:fromlxmlimportetreeroot=etree.Element('root')root.text='Hello,World!'print(root.text)print(etree.tostring(root))運(yùn)行結(jié)果:Hello,World!b'<root>Hello,World!</root>'lxml庫(kù)etree模塊中提供了如下三個(gè)函數(shù)lxml庫(kù)fromstring()函數(shù)XML()函數(shù)HTML()函數(shù)將XML文件解析為樹(shù)結(jié)構(gòu):從字符串中解析XML文檔或片段,返回根節(jié)點(diǎn)(或解析器目標(biāo)返回的結(jié)果)。從字符串常量中解析XML文檔或片段,返回根節(jié)點(diǎn)(或解析器目標(biāo)返回的結(jié)果)。從字符串常量中解析HTML文檔或片段,返回根節(jié)點(diǎn)(或解析器目標(biāo)返回的結(jié)果)。etree模塊中提供了如下三個(gè)函數(shù)lxml庫(kù)將XML文件解析為樹(shù)結(jié)構(gòu):從字符串中解析XML文檔或片段。返回根節(jié)點(diǎn)(或解析器目標(biāo)返回的結(jié)果)。fromstring()函數(shù)從字符串常量中解析XML文檔或片段。返回根節(jié)點(diǎn)(或解析器目標(biāo)返回的結(jié)果)。XML()函數(shù)從字符串常量中解析HTML文檔或片段。返回根節(jié)點(diǎn)(或解析器目標(biāo)返回的結(jié)果)。HTML()函數(shù)lxml庫(kù)etree模塊示例:fromlxmlimportetreeroot=etree.Element('root')xml_data='<root>data</root>'root_one=etree.fromstring(xml_data)print(root_one)print(etree.tostring(root_one))運(yùn)行結(jié)果:<Elementrootat0x1940dd2b600>b'<root>data</root>'調(diào)用parse()函數(shù)從XML文件中直接解析。直接解析在調(diào)用parse()函數(shù)時(shí),如果沒(méi)有提供解析器,那么就使用默認(rèn)的解析器,函數(shù)會(huì)返回一個(gè)ElementTree類(lèi)型的對(duì)象。示例:fromlxmlimportetreehtml=etree.parse('./hello.html')result=etree.tostring(html,pretty_print=True)print(result)html文件如下:調(diào)用parse()函數(shù)從XML文件中直接解析。直接解析如果沒(méi)有提供解析器,就使用默認(rèn)的解析器,函數(shù)會(huì)返回一個(gè)ElementTree類(lèi)型的對(duì)象。運(yùn)行結(jié)果:<!--hello.html--><div><ul><liclass="item-0"><ahref="link1.html">firstitem</a></li><liclass="item-1"><ahref="link2.html">seconditem</a></li><liclass="item-inactive"><ahref="link3.html"><spanclass="bold">thirditem</span></a></li><liclass="item-1"><ahref="link4.html">fourthitem</a></li><liclass="item-0"><ahref="link5.html">fifthitem</a></li></ul></div>在ElementTree類(lèi)或Elements類(lèi)中,提供了三個(gè)常用的方法,可以滿足大部分搜索和查詢需求。lxml庫(kù)返回匹配到的第一個(gè)子元素find()方法以列表的形式返回所有匹配的子元素findall()方法返回一個(gè)所有匹配元素的迭代器iterfind()方法三種方法的參數(shù)都是XPath語(yǔ)句。lxml庫(kù)示例:fromlxmlimportetreeroot=etree.XML("<root><ax='123'>aText<b/><c/><b/></a></root>")print(root.find("a").tag)print(root.findall(".//a[@x]")[0].tag)運(yùn)行結(jié)果:aTexta以HTML示例文件做為素材來(lái)介紹lxml庫(kù)的基本使用,該文件名為hello.html,內(nèi)容如下:lxml庫(kù)的基本使用示例:<!--hello.html--><div><ul><liclass="item-0"><ahref="link1.html">firstitem</a></li><liclass="item-1"><ahref="link2.html">seconditem</a></li><liclass="item-inactive"><ahref="link3.html"><spanclass="bold">thirditem</span></a></li><liclass="item-1"><ahref="link4.html">fourthitem</a></li><liclass="item-0"><ahref="link5.html">fifthitem</a></li></ul></div>lxml庫(kù)的基本使用//li//li/@class//li[last()-1]/a可以直接使用“//”從任意位置選取節(jié)點(diǎn)li,路徑表達(dá)式如下:1在上個(gè)表達(dá)式的末尾,使用“/”向下選取節(jié)點(diǎn),并使用“@”選取class屬性節(jié)點(diǎn),表達(dá)式如下:2從任意位置開(kāi)始選取倒數(shù)第二個(gè)<li>標(biāo)簽,再向下選取標(biāo)簽<a>。如果要獲取該標(biāo)簽中的文本,可以使用如下表達(dá)式:3//li[last()-1]/a]/text()或lxml庫(kù)的基本使用示例:fromlxmlimportetreehtml=etree.parse('hello.html')result=html.xpath('//li')print(result)print(len(result))print(type(result))print(type(result[0]))運(yùn)行結(jié)果:[<Elementliat0x17d15529240>,<Elementliat0x17d15529280>,<Elementliat0x17d15529340>,<Elementliat0x17d15529380>,<Elementliat0x17d155293c0>]5<class'list'><class'lxml.etree._Element'>lxml庫(kù)的基本使用示例:fromlxmlimportetreehtml=etree.parse('hello.html')result=html.xpath('//li[last()-1]/a')print(result)print(etree.tostring(result[0]))print(result[0].text)運(yùn)行結(jié)果:[<Elementaat0x17d15529c00>]b'<ahref="link4.html">fourthitem</a>'fourthitem解析某網(wǎng)站首頁(yè)熱搜榜示例:importurllib.requestfromlxmlimportetreeuser_agent="Mozilla/5.0(compatible;MSIE9.0;WindowsNT6.1;Trident/5.0"headers={"User-Agent":user_agent}url='/'request=urllib.request.Request(url,headers=headers)response=urllib.request.urlopen(request)html=response.read().decode("utf-8")root=etree.HTML(html)title=root.xpath('//span[@class="title-content-title"]/text()')print(title)運(yùn)行結(jié)果:['金秋之約','中國(guó)新

溫馨提示

  • 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論