一、xpath 常用規(guī)則
二显拜、在python的安裝使用
python3環(huán)境下安裝命令
pip install lxml
三枢泰、實(shí)踐
1笨蚁、常用數(shù)據(jù)的導(dǎo)入
(1) 通過html文件導(dǎo)入
html = etree.parse('./index.html',etree.HTMLParser())
result = etree.tostring(html)
print(result.decode('utf-8'))
( 2)通過字符串轉(zhuǎn)成html格式
用lxml解析html凶朗,利用etree.HTML解析字符串將字符串解析從html格式的文件瓷胧,?經(jīng)過處理后,部分缺失的節(jié)點(diǎn)可以自動(dòng)修復(fù)棚愤,并且還自動(dòng)添加了 body搓萧、html 節(jié)點(diǎn)
text = '''
<ul>
<li class="item-0"><a >item 0 </a></li>
<li class="item-1"><a >item 1 </a></li>
<li class="item-2"><a >item 2 </a></li>
<li class="item-3"><a >item 3 </a></li>
<li class="item-4"><a >item 4 </a></li>
<li class="item-5"><a >item 5 </a></li>
</ul>
'''
html = etree.HTML(text)
s = etree.tostring(html).decode()
print(s)
2、通過絕對(duì)路徑查找
(1)獲取某個(gè)標(biāo)簽的文本內(nèi)容
方式一:
html_data = html.xpath('/html/body/ul/li/a')
for i in html_data:
print(i.text)
# 方式二
html_data = html.xpath('/html/body/ul/li/a/text()')
print(html_data)
for i in html_data:
print(i)
(2)通過@xx獲取屬性
html_data = html.xpath('/html/body/ul/li/a/@href')
print(html_data)
for i in html_data:
print(i)
(3)通過[]獲取指定屬性標(biāo)簽的文本內(nèi)容
html_data = html.xpath('/html/body/ul/li/a[@)
print(html_data)
3宛畦、通過相對(duì)路徑獲取內(nèi)容
(1)獲取標(biāo)簽內(nèi)容
html_data = html.xpath('//li/a/text()')
print(html_data)
(2)獲取標(biāo)簽屬性
html_data = html.xpath('//li/a/@href')
print(html_data)
(3)獲取指定屬性標(biāo)簽的內(nèi)容
html_data = html.xpath('//li/a[@)
print(html_data)
(4)獲取指定索引的標(biāo)簽內(nèi)容
html_data = html.xpath('//li[1]/a/text()')
print(html_data)
4瘸洛、子節(jié)點(diǎn)
通過 / 或 // 即可查找元素的子節(jié)點(diǎn)或子孫節(jié)點(diǎn)。
?選擇 li 節(jié)點(diǎn)的所有直接 a 子節(jié)點(diǎn)xpath為://li/a
5刃永、父節(jié)點(diǎn)
html_data = html.xpath('//a[@)
print(html_data)
6货矮、常用屬性
(1)匹配屬性
標(biāo)簽[@屬性=“”]
# 匹配屬性
html_data = html.xpath('//a[@)
print(html_data)
(2)獲取文本
@text()
# 匹配屬性
html_data = html.xpath('//a[@)
print(html_data)
(3)獲取屬性
/@屬性
# 獲取屬性
html_data = html.xpath('//li/a/@href')
print(html_data)
(4) 屬性多值匹配
[contains(@屬性,"值")]
html_data = html.xpath('//li[contains(@class, "a")]/a/text()')
print(html_data)
(5)多屬性匹配
html_data = html.xpath('//li[contains(@class, "a") and
contains(@name,"1")]/a/text()')
print(html_data)
(6)last 函數(shù)
# 獲取最后一個(gè)
result = html.xpath('//li[last()]/a/text()')
print(result)
# 獲取倒數(shù)第三個(gè)
result = html.xpath('//li[last()-2]/a/text()')
print(result)
(7)position函數(shù)
# 獲取前兩個(gè)
result = html.xpath('//li[position()<3]/a/text()')
print(result)
(8)中括號(hào)獲取
# 獲取第一個(gè)
result = html.xpath('//li[1]/a/text()')
print(result)