版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
lxml解析庫Contents知識目標掌握lxml使用方法技能目標提高數(shù)據(jù)采集和處理能力素養(yǎng)目標培養(yǎng)良好的信息素養(yǎng)和道德意識lxml庫lxml庫是Python的XML和HTML解析器主要用于解析和提取HTML或者XML格式的數(shù)據(jù),可以利用XPath語法快速地定位特定的元素或節(jié)點。lxml庫lxml庫是Python的XML和HTML解析器主要用于解析和提取HTML或者XML格式的數(shù)據(jù)。XPath語法特定元素或節(jié)點快速定位lxml庫lxml庫中大部分的功能都位于:lxml.etree模塊導入lxml.etree模塊的常見方式如下:fromlxmlimportetreelxml庫lxml庫的一些相關類如下:類說明Element可以理解為XML的節(jié)點。ElementTree可以理解為一個完整的XML文檔樹。ElementPath可以理解為XPath,用于搜索和定位節(jié)點。lxml庫可以理解為XML的節(jié)點。Element類是XML處理的核心類示例:fromlxmlimportetreeroot=etree.Element('root')print(root)運行結(jié)果:<Elementrootat0x17d1539e080>參數(shù)root表示節(jié)點的名稱lxml庫Element類的相關操作,主要分為三個部分。通過tag屬性獲取節(jié)點的名稱,示例如下:節(jié)點操作節(jié)點屬性的操作節(jié)點內(nèi)文本的操作示例:fromlxmlimportetreeroot=etree.Element('root')print(root)print(root.tag)運行結(jié)果:<Elementrootat0x17d1539e080>rootset(key,value)方法,是已有的節(jié)點添加屬性。調(diào)用該方法時可以傳入兩個參數(shù):第一個參數(shù)表示屬性的名稱第二個參數(shù)表示屬性的值示例:fromlxmlimportetreeroot=etree.Element('root')root.set('age','30')print(etree.tostring(root))運行結(jié)果:b'<rootage="30"/>'用到了tostring()函數(shù),該函數(shù)可以將元素序列化為其XML樹的編碼字符串表示形式。lxml庫通過text、tail屬性或者xpath()方法來訪問文本內(nèi)容。#給root節(jié)點添加文本示例:fromlxmlimportetreeroot=etree.Element('root')root.text='Hello,World!'print(root.text)print(etree.tostring(root))運行結(jié)果:Hello,World!b'<root>Hello,World!</root>'lxml庫etree模塊中提供了如下三個函數(shù)lxml庫fromstring()函數(shù)XML()函數(shù)HTML()函數(shù)將XML文件解析為樹結(jié)構(gòu):從字符串中解析XML文檔或片段,返回根節(jié)點(或解析器目標返回的結(jié)果)。從字符串常量中解析XML文檔或片段,返回根節(jié)點(或解析器目標返回的結(jié)果)。從字符串常量中解析HTML文檔或片段,返回根節(jié)點(或解析器目標返回的結(jié)果)。etree模塊中提供了如下三個函數(shù)lxml庫將XML文件解析為樹結(jié)構(gòu):從字符串中解析XML文檔或片段。返回根節(jié)點(或解析器目標返回的結(jié)果)。fromstring()函數(shù)從字符串常量中解析XML文檔或片段。返回根節(jié)點(或解析器目標返回的結(jié)果)。XML()函數(shù)從字符串常量中解析HTML文檔或片段。返回根節(jié)點(或解析器目標返回的結(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))運行結(jié)果:<Elementrootat0x1940dd2b600>b'<root>data</root>'調(diào)用parse()函數(shù)從XML文件中直接解析。直接解析在調(diào)用parse()函數(shù)時,如果沒有提供解析器,那么就使用默認的解析器,函數(shù)會返回一個ElementTree類型的對象。示例:fromlxmlimportetreehtml=etree.parse('./hello.html')result=etree.tostring(html,pretty_print=True)print(result)html文件如下:調(diào)用parse()函數(shù)從XML文件中直接解析。直接解析如果沒有提供解析器,就使用默認的解析器,函數(shù)會返回一個ElementTree類型的對象。運行結(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)運行結(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é)點li,路徑表達式如下:1在上個表達式的末尾,使用“/”向下選取節(jié)點,并使用“@”選取class屬性節(jié)點,表達式如下:2從任意位置開始選取倒數(shù)第二個<li>標簽,再向下選取標簽<a>。如果要獲取該標簽中的文本,可以使用如下表達式: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]))運行結(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)運行結(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)運行結(jié)果:['金秋之約','中國新
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 石材打膠合同范例
- 私宅改建拆除合同范例
- 公寓訂購窗簾合同范例
- 水渣購銷合同范例
- 公司苗木訂購合同范例
- 北京入職合同范例
- 模具投資協(xié)議合同范例
- 唐鎮(zhèn)租房合同范例
- 2024年電動卡車區(qū)域配送合同
- 2024年海洋貨物運輸保險合同案例
- 最新Unit-8-How-do-you-make-a-banana-milk-shake-全單元教案
- 工貿(mào)行業(yè)重大生產(chǎn)安全事故隱患判定標準2022版(含重大安全事故隱患檢查表)
- T-SDDA 0002-2021 住宅裝飾裝修工程質(zhì)量驗收標準
- 《涂裝工程安全設計規(guī)范》噴漆室
- 門診、住院業(yè)務流程和數(shù)據(jù)流
- 全國各省關氏輩分收集
- 壓圈沖壓模具設計說明書(終極版) 2
- 蘇教版五下數(shù)學思維訓練7 枚舉法(原卷+解析版)
- 預防接種門診流程
- WXZ196系列微機消諧裝置說明書
- 震雄注塑機Ai_01操作說明書(中文)
評論
0/150
提交評論