Python 基於lxml.etree實現xpath查找HTML元素


基於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

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM