人妖在线一区,国产日韩欧美一区二区综合在线,国产啪精品视频网站免费,欧美内射深插日本少妇

新聞動(dòng)態(tài)

python數(shù)據(jù)解析之XPath詳解

發(fā)布日期:2021-12-29 19:39 | 文章來(lái)源:源碼之家

XPath

XPath即為XML路徑語(yǔ)言(XML Path Language),它是一種用來(lái)確定XML文檔中某部分位置的語(yǔ)言。

xpath是最常用且最便捷高效的一種解析方式,通用型強(qiáng),其不僅可以用于python語(yǔ)言中,還可以用于其他語(yǔ)言中,數(shù)據(jù)解析建議首先xpath。

XPath使用方法

xpath解析原理:

實(shí)例化一個(gè)etree的對(duì)象,且需要將被解析的頁(yè)面源代碼數(shù)據(jù)加載到該對(duì)象中

調(diào)用etree對(duì)象中的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對(duì)象。必須是本地的文件,不能是字符串
tree = etree.HTML(源碼)  #從互聯(lián)網(wǎng)加載源碼,實(shí)例化etree對(duì)象
#  / 表示從從根節(jié)點(diǎn)開(kāi)始,一個(gè) / 表示一個(gè)層級(jí),//表示多個(gè)層級(jí)
r = tree.xpath('//div//a') #以列表的形式返回div下的所有的a標(biāo)簽對(duì)象的地址
r = tree.xpath('//div//a')[1] #返回div下的第二個(gè)a標(biāo)簽對(duì)象地址
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測(cè)試</title>
 </head>
 <body>
  <div>
<p>百里守約</p>
  </div>
  <div class="song">
<p>前程似錦</p>
  </div>
  <div class="song">
<p>前程似錦2</p>
  </div>
  <div class="ming">  #后面改了名字
<p>以夢(mèng)為馬</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二手房

將頁(yè)面中的房源名稱解析出來(lái),即將title值解析出來(lái)就行

思路

  • 獲取房源名稱所在的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對(duì)象
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)和爬取下來(lái)的源碼結(jié)構(gòu)不一樣。所以正確方法是先將源碼爬下來(lái)再觀察進(jìn)行構(gòu)造xpath。

如下瀏覽器中的元素結(jié)構(gòu)和爬取的元素結(jié)構(gòu)就不一樣。如果按照瀏覽器匯總的元素來(lái)構(gòu)造xpath表達(dá)式,則不會(huì)解析成功!

總結(jié)

本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注本站的更多內(nèi)容!

版權(quán)聲明:本站文章來(lái)源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請(qǐng)保持原文完整并注明來(lái)源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來(lái)源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來(lái),僅供學(xué)習(xí)參考,不代表本站立場(chǎng),如有內(nèi)容涉嫌侵權(quán),請(qǐng)聯(lián)系alex-e#qq.com處理。

相關(guān)文章

實(shí)時(shí)開(kāi)通

自選配置、實(shí)時(shí)開(kāi)通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專屬顧問(wèn)服務(wù)

1對(duì)1客戶咨詢顧問(wèn)

在線
客服

在線客服:7*24小時(shí)在線

客服
熱線

400-630-3752
7*24小時(shí)客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部