Python 基于lxml.etree实现xpath查找HTML元素

简介: Python 基于lxml.etree实现xpath查找HTML元素

基于lxml.etree实现xpath查找HTML元素

 


#实践环境

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

 

目录
相关文章
|
3天前
|
Python
Python 下载 html 中的 图片
Python 下载 html 中的 图片
9 2
|
13天前
|
Python
【Leetcode刷题Python】剑指 Offer II 082. 含有重复元素集合的组合
解决LeetCode平台《剑指 Offer II 082. 含有重复元素集合的组合》题目的Python代码实现,通过深度优先搜索算法找出所有和为特定目标值的数字组合,并在搜索过程中通过排序和跳过重复元素来避免解集中出现重复组合。
23 2
|
4天前
|
JavaScript 前端开发
DOM的概念?获取html元素的方法有哪些?
DOM的概念?获取html元素的方法有哪些?
14 0
|
4天前
|
JavaScript 前端开发
JavaScript 改变 HTML 元素
JavaScript 改变 HTML 元素
8 0
|
4天前
|
前端开发 JavaScript
JavaScript 获取 HTML 元素方法
JavaScript 获取 HTML 元素方法
8 0
|
1月前
|
索引 Python
Python中,元素
【7月更文挑战第13天】Python中,元素
16 5
|
14天前
|
算法 索引 Python
【Leetcode刷题Python】34. 在排序数组中查找元素的第一个和最后一个位置(二分查找)
解决LeetCode "在排序数组中查找元素的第一个和最后一个位置" 问题的方法。第一种方法是使用两次二分查找,首先找到目标值的最左边界,然后找到最右边界。第二种方法是利用Python的list.index()方法,先正序找到起始位置,再逆序找到结束位置,并给出了两种方法的Python实现代码。
29 0
|
14天前
|
Python
【Leetcode刷题Python】203.移除链表元素
文章提供了三种删除链表中特定值节点的方法:迭代法、虚拟节点迭代删除法和递归法,并给出了相应的Python实现代码。
8 0
|
1月前
|
XML 移动开发 数据格式
【Python】已解决:bs4.FeatureNotFound: Couldn’t find a tree builder with the features you requested: html5
【Python】已解决:bs4.FeatureNotFound: Couldn’t find a tree builder with the features you requested: html5
53 1
|
1月前
|
XML 数据采集 机器学习/深度学习
使用 XPath 定位 HTML 中的 img 标签
使用 XPath 定位 HTML 中的 img 标签