XPATH語(yǔ)句可以用來(lái)快速定位一個(gè)XML文本中的內(nèi)容,當(dāng)然也可以是HTML文本晰骑,這里我們使用lxml庫(kù)來(lái)解析会放,達(dá)到快速批量獲取網(wǎng)頁(yè)相似內(nèi)容的功能
安裝
$ pip install lxml
基本使用
假設(shè)匹配出網(wǎng)頁(yè)所含所有圖片的鏈接
from lxml import etree
import requests
html = requests.get('http://www.lzu.edu.cn').content.decode('utf-8')
##獲取網(wǎng)頁(yè)代碼
dom_tree = etree.HTML(html)
###XPath匹配
links = doc_tree.xpath('//img/@src')
for i in links:
print(i)
##將會(huì)輸出網(wǎng)頁(yè)中所有圖片標(biāo)簽的鏈接
XPath語(yǔ)法講解
我們假設(shè)有如下網(wǎng)頁(yè)
<html>
<head>
<title>這是標(biāo)題</title>
</head>
<body>
<div class="cn_search_engine">
<a >百度</a>
</div>
<div class="other_search_engine">
<a >Bing</a>
<a >Google</a>
</div>
</body>
</html>
如上袍啡,HTML標(biāo)簽是一個(gè)樹(shù)形結(jié)構(gòu)吱韭,我們稱這個(gè)為DOM樹(shù)惧互,xpath匹配出其中的元素棱烂,相當(dāng)于在樹(shù)中查找子節(jié)點(diǎn)啊租漂,因此效率相對(duì)正則表達(dá)式要高
- "http://"和"/"的區(qū)別
兩者都用來(lái)表示一個(gè)節(jié)點(diǎn)的路徑,不同節(jié)點(diǎn)名用“/”分開(kāi)
//代表相對(duì)路徑颊糜,匹配可以是任意深度的節(jié)點(diǎn)
/ 代表絕對(duì)路徑哩治,故對(duì)于網(wǎng)頁(yè)來(lái)說(shuō),匹配從/html開(kāi)始
如同樣是解析上述數(shù)據(jù)中的所有的鏈接衬鱼,下面兩語(yǔ)句等價(jià)
....
##省略若干代碼业筏,dom_tree為我們解析之后的etree對(duì)象
##語(yǔ)句一:
dom_tree.xpath('/html/body/div/a/@href')
##語(yǔ)句二:
dom_tree.xpath('//div/a/@href')
- 獲取元素屬性和文字的區(qū)別
dom_tree.xpath('//div/a/@href')
#將返回所有的鏈接網(wǎng)址
dom_tree.xpath('//div/a/text()')
#將獲取所有鏈接的名稱