基于lxml.etree实现xpath查找HTML元素
By:授客 QQ:1033553122
#实践环境
WIN 10
Python 3.6.5
#实践代码
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from lxml import etree
html_str = '''
消费项目.... | 一月 | 二月 |
---|---|---|
衣服 | $241.10 | $50.20 |
化妆品 | $30.00 | $44.45 |
食物 | $730.40 | $650.00 |
总计 | $1001.50 | $744.65 |
'''
root_node = etree.HTML(html_str) # 解析HTML字符串,并返回HTML根结点
print('根节节点名称为:%s' % root_node.tag) # 输出 html
# 查找根节点
print(root_node.xpath('/html')) # 输出 ]
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')) ## 输出节点内容
/*
衣服$241.10$50.20*/
# 注意:etree.tostring返回结果为字节对象
print(etree.tostring(second_tr)) ## 输出以下内容
/*
b'
\n 衣服\n $241.10\n $50.20\n \n '*/
print(etree.tostring(second_tr).decode('utf-8')) # 输出以下内容
/*
衣服$241.10$50.20*/
#参考连接
https://lxml.de/tutorial.html#the-element-class