版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
lxml解析庫Contents知識目標(biāo)掌握lxml使用方法技能目標(biāo)提高數(shù)據(jù)采集和處理能力素養(yǎng)目標(biāo)培養(yǎng)良好的信息素養(yǎng)和道德意識lxml庫lxml庫是Python的XML和HTML解析器主要用于解析和提取HTML或者XML格式的數(shù)據(jù),可以利用XPath語法快速地定位特定的元素或節(jié)點(diǎn)。lxml庫lxml庫是Python的XML和HTML解析器主要用于解析和提取HTML或者XML格式的數(shù)據(jù)。XPath語法特定元素或節(jié)點(diǎn)快速定位lxml庫lxml庫中大部分的功能都位于:lxml.etree模塊導(dǎo)入lxml.etree模塊的常見方式如下:fromlxmlimportetreelxml庫lxml庫的一些相關(guān)類如下:類說明Element可以理解為XML的節(jié)點(diǎn)。ElementTree可以理解為一個完整的XML文檔樹。ElementPath可以理解為XPath,用于搜索和定位節(jié)點(diǎn)。lxml庫可以理解為XML的節(jié)點(diǎn)。Element類是XML處理的核心類示例:fromlxmlimportetreeroot=etree.Element('root')print(root)運(yùn)行結(jié)果:<Elementrootat0x17d1539e080>參數(shù)root表示節(jié)點(diǎn)的名稱lxml庫Element類的相關(guān)操作,主要分為三個部分。通過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ù):第一個參數(shù)表示屬性的名稱第二個參數(shù)表示屬性的值示例:fromlxmlimportetreeroot=etree.Element('root')root.set('age','30')print(etree.tostring(root))運(yùn)行結(jié)果:b'<rootage="30"/>'用到了tostring()函數(shù),該函數(shù)可以將元素序列化為其XML樹的編碼字符串表示形式。lxml庫通過text、tail屬性或者xpath()方法來訪問文本內(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庫etree模塊中提供了如下三個函數(shù)lxml庫fromstring()函數(shù)XML()函數(shù)HTML()函數(shù)將XML文件解析為樹結(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模塊中提供了如下三個函數(shù)lxml庫將XML文件解析為樹結(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庫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ù)時,如果沒有提供解析器,那么就使用默認(rèn)的解析器,函數(shù)會返回一個ElementTree類型的對象。示例:fromlxmlimportetreehtml=etree.parse('./hello.html')result=etree.tostring(html,pretty_print=True)print(result)html文件如下:調(diào)用parse()函數(shù)從XML文件中直接解析。直接解析如果沒有提供解析器,就使用默認(rèn)的解析器,函數(shù)會返回一個ElementTree類型的對象。運(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類或Elements類中,提供了三個常用的方法,可以滿足大部分搜索和查詢需求。lxml庫返回匹配到的第一個子元素find()方法以列表的形式返回所有匹配的子元素findall()方法返回一個所有匹配元素的迭代器iterfind()方法三種方法的參數(shù)都是XPath語句。lxml庫示例: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示例文件做為素材來介紹lxml庫的基本使用,該文件名為hello.html,內(nèi)容如下:lxml庫的基本使用示例:<!--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庫的基本使用//li//li/@class//li[last()-1]/a可以直接使用“//”從任意位置選取節(jié)點(diǎn)li,路徑表達(dá)式如下:1在上個表達(dá)式的末尾,使用“/”向下選取節(jié)點(diǎn),并使用“@”選取class屬性節(jié)點(diǎn),表達(dá)式如下:2從任意位置開始選取倒數(shù)第二個<li>標(biāo)簽,再向下選取標(biāo)簽<a>。如果要獲取該標(biāo)簽中的文本,可以使用如下表達(dá)式:3//li[last()-1]/a]/text()或lxml庫的基本使用示例: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庫的基本使用示例: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)站首頁熱搜榜示例: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é)果:['金秋之約','中國新
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年通信協(xié)議與網(wǎng)絡(luò)協(xié)議進(jìn)階題集
- 2026年解釋針對職場溝通技巧和禮儀的考核題目
- 2026年金融投資安全試題解析投資風(fēng)險(xiǎn)與防范策略
- 2026年系統(tǒng)架構(gòu)師面試復(fù)雜算法題的解決思路
- 2026年企業(yè)內(nèi)部培訓(xùn)資料CNAS企業(yè)質(zhì)量認(rèn)證標(biāo)準(zhǔn)相關(guān)試題
- 2026年能源工程項(xiàng)目收尾技術(shù)要點(diǎn)題解
- 2026年政府政策與法律解讀公務(wù)員筆試實(shí)務(wù)模擬題
- 2026年財(cái)務(wù)管理與財(cái)務(wù)分析考試寶典
- 2026年審計(jì)從業(yè)者易混淆知識點(diǎn)錯題集
- 2026年程序員進(jìn)階考試題庫代碼與算法全解析
- 老年患者多病共存精準(zhǔn)管理策略
- 四川省遂寧市2026屆高三上學(xué)期一診考試英語試卷(含答案無聽力音頻有聽力原文)
- 福建省寧德市2025-2026學(xué)年高三上學(xué)期期末考試語文試題(含答案)
- 建筑施工行業(yè)2026年春節(jié)節(jié)前全員安全教育培訓(xùn)
- 2026屆高考語文復(fù)習(xí):小說人物形象復(fù)習(xí)
- 2026及未來5年中國防病毒網(wǎng)關(guān)行業(yè)市場全景調(diào)查及發(fā)展前景研判報(bào)告
- 兩個合伙人股權(quán)協(xié)議書范文模板
- GB/T 44082-2024道路車輛汽車列車多車輛間連接裝置強(qiáng)度要求
- 控?zé)熤嗅t(yī)科普知識講座
- 脫碳塔CO2脫氣塔設(shè)計(jì)計(jì)算
- 產(chǎn)品報(bào)價(jià)單貨物報(bào)價(jià)表(通用版)
評論
0/150
提交評論