python數(shù)據(jù)XPath使用案例詳解
XPath
XPath即為XML路徑語言(XML Path Language),它是一種用來確定XML文檔中某部分位置的語言。
XPath使用方法
xpath解析原理:
1.實(shí)例化一個(gè)etree的對象,且需要將被解析的頁面源代碼數(shù)據(jù)加載到該對象中
2.調(diào)用etree對象中的xpath方法結(jié)合著xpath表達(dá)式實(shí)現(xiàn)標(biāo)簽的定位和內(nèi)容的捕獲
安裝lxml
pip install -i https://mirrors.aliyun.com/pypi/simple/ lxml
from lxml import etree tree = etree.parse('./tree.html') #從本地加載源碼,實(shí)例化一個(gè)etree對象。必須是本地的文件,不能是字符串 tree = etree.HTML(源碼) #從互聯(lián)網(wǎng)加載源碼,實(shí)例化etree對象 # / 表示從從根節(jié)點(diǎn)開始,一個(gè) / 表示一個(gè)層級(jí),//表示多個(gè)層級(jí) r = tree.xpath('//div//a') #以列表的形式返回div下的所有的a標(biāo)簽對象的地址 r = tree.xpath('//div//a')[1] #返回div下的第二個(gè)a標(biāo)簽對象地址 r = tree.xpath('//div[@class="tang"]') #以列表的形式返回tang標(biāo)簽地址 r = tree.xpath('//div[@class="tang"]//a') #以列表的形式返回tang標(biāo)簽下所有的a標(biāo)簽地址 #獲取標(biāo)簽中的文本內(nèi)容 r = tree.xpath('//div[@class="tang"]//a/text()') #以列表的形式返回所有a標(biāo)簽中的文本 #獲取標(biāo)簽中屬性值 r = tree.xpath('//div//a/@href') ##以列表的形式返回所有a標(biāo)簽中href屬性值
tree.html
<html lang="en"> <head> <meta charset="utf-8" /> <meta name="theme-color" content="#ffffff"></meta> <title>xpaht測試</title> </head> <body> <div> <p>百里守約</p> </div> <div class="song"> <p>前程似錦</p> </div> <div class="song"> <p>前程似錦2</p> </div> <div class="ming"> #后面改了名字 <p>以夢為馬</p> </div> <div class="tang"> <ul> <li><a title='qing'>清明時(shí)節(jié)</a></li> <li><a title='qing'>秦時(shí)明月</a></li> <li><a title='qing'>漢時(shí)關(guān)</a></li> </ul> </div> <flink-root></flink-root> <script type="text/javascript" src="runtime.0dcf16aad31edd73d8e8.js"></script> <script type="text/javascript" src="es2015-polyfills.923637a8e6d276e6f6df.js"></script> <script type="text/javascript" src="polyfills.bb2456cce5322b484b77.js"></script> <script type="text/javascript" src="main.8128365baee3dc30e607.js"></script> </body> </html>
案例—58二手房
將頁面中的房源名稱解析出來,即將title值解析出來就行
思路
獲取房源名稱所在的url,并獲取其響應(yīng)數(shù)據(jù)
數(shù)據(jù)解析,構(gòu)造xpath表達(dá)式。提取目標(biāo)數(shù)據(jù)
import requests from lxml import etree url = "https://bj.58.com/ershoufang/p1/" headers={ 'User-Agent':'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Mobile Safari/537.36' } pag_response = requests.get(url,headers=headers,timeout=3).text #實(shí)例化一個(gè)etree對象 tree = etree.HTML(pag_response) r = tree.xpath('//span[@class="content-title"]/text()') #獲取所有//span標(biāo)簽為"content-title"的文本內(nèi)容 print(r)
Tips:我們使用xpath進(jìn)行數(shù)據(jù)解析時(shí),不能直接看元素就進(jìn)行構(gòu)造xpath表達(dá)式,以為很多情況下從瀏覽中看的元素結(jié)構(gòu)和爬取下來的源碼結(jié)構(gòu)不一樣。所以正確方法是先將源碼爬下來再觀察進(jìn)行構(gòu)造xpath。
如下瀏覽器中的元素結(jié)構(gòu)和爬取的元素結(jié)構(gòu)就不一樣。如果按照瀏覽器匯總的元素來構(gòu)造xpath表達(dá)式,則不會(huì)解析成功!
以上就是python數(shù)據(jù)XPath使用案例詳解的詳細(xì)內(nèi)容,更多關(guān)于python數(shù)據(jù)XPath使用的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
在Windows服務(wù)器下用Apache和mod_wsgi配置Python應(yīng)用的教程
這篇文章主要介紹了在Windows服務(wù)器下用Apache和mod_wsgi配置Python應(yīng)用的教程,本文選擇以flask框架作為示例,需要的朋友可以參考下2015-05-05python人工智能human?learn繪圖創(chuàng)建機(jī)器學(xué)習(xí)模型
這篇文章主要為大家介紹了python人工智能human?learn繪圖就可以創(chuàng)建機(jī)器學(xué)習(xí)模型的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-11-11關(guān)于scipy.optimize函數(shù)使用及說明
這篇文章主要介紹了關(guān)于scipy.optimize函數(shù)使用及說明,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12Python中用post、get方式提交數(shù)據(jù)的方法示例
最近在學(xué)習(xí)使用Python,發(fā)現(xiàn)網(wǎng)上很少提到如何使用post,所以下面這篇文章主要給大家介紹了關(guān)于Python中用post、get方式提交數(shù)據(jù)的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。2017-09-09探索python?dask靈活的并行計(jì)算庫應(yīng)用場景示例
這篇文章主要介紹了探索python?dask靈活的并行計(jì)算庫應(yīng)用場景示例,Dask?是?Python?中的一個(gè)靈活的并行計(jì)算庫,允許用戶利用?CPU?內(nèi)核的強(qiáng)大功能,對大于內(nèi)存的數(shù)據(jù)集執(zhí)行分布式計(jì)算2024-01-01