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