基于lxml.etree實作xpath查找HTML元素
By:授客 QQ:1033553122
#實踐環境
WIN 10
Python 3.6.5
lxml-4.6.2-cp36-cp36m-win_amd64.whl
#實踐代碼
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from lxml import etree
html_str = '''<html>
<body>
<table width="400" border="1">
<tr>
<th align="left">消費項目....</th>
<th align="right">一月</th>
<th align="right">二月</th>
</tr>
<tr>
<td align="left">衣服</td>
<td align="right">$241.10</td>
<td align="right">$50.20</td>
</tr>
<tr>
<td align="left">化妝品</td>
<td align="right">$30.00</td>
<td align="right">$44.45</td>
</tr>
<tr>
<td align="left">食物</td>
<td align="right">$730.40</td>
<td align="right">$650.00</td>
</tr>
<tr>
<th align="left">總計</th>
<th align="right">$1001.50</th>
<th align="right">$744.65</th>
</tr>
</table>
</body>
</html>
'''
root_node = etree.HTML(html_str) # 解析HTML字元串,并傳回HTML根結點
print('根節節點名稱為:%s' % root_node.tag) # 輸出 html
# 查找根節點
print(root_node.xpath('/html')) # 輸出 <Element html at 0x17245dc8508>]
tr_element_list = root_node.xpath("//table/tr[2]/td") # 擷取table元素節點下,第二個tr元素節點下的所有td元素
for element in tr_element_list:
print(element.tag, element.text)
/* for循環輸出如下
td 衣服
td $241.10
td $50.20
*/
etree.tostring(root_node, encoding='utf-8').decode('utf-8') ## 輸出節點内容
second_tr = root_node.xpath('//table/tr[2]')[0] # 擷取table元素節點下,第二個tr元素節點
print(etree.tostring(second_tr, encoding='utf-8').decode('utf-8')) ## 輸出節點内容
/*
<tr>
<td align="left">衣服</td>
<td align="right">$241.10</td>
<td align="right">$50.20</td>
</tr>
*/
# 注意:etree.tostring傳回結果為位元組對象
print(etree.tostring(second_tr)) ## 輸出以下内容
/*
b'<tr>\n <td align="left">衣服</td>\n <td align="right">$241.10</td>\n <td align="right">$50.20</td>\n </tr>\n '
*/
print(etree.tostring(second_tr).decode('utf-8')) # 輸出以下内容
/*
<tr>
<td align="left">衣服</td>
<td align="right">$241.10</td>
<td align="right">$50.20</td>
</tr>
*/
#參考連接配接
https://lxml.de/tutorial.html#the-element-class
https://lxml.de/tutorial.html#the-xml-function
作者:授客
QQ:1033553122
全國軟體測試QQ交流群:7156436
Git位址:https://gitee.com/ishouke
友情提示:限于時間倉促,文中可能存在錯誤,歡迎指正、評論!
作者五行缺錢,如果覺得文章對您有幫助,請掃描下邊的二維碼打賞作者,金額随意,您的支援将是我繼續創作的源動力,打賞後如有任何疑問,請聯系我!!!
微信打賞
支付寶打賞 全國軟體測試交流QQ群