xpath用法 案例笔记4

本文介绍了如何使用lxml库的etree.HTML方法解析HTML文本并进行XPath操作。通过示例展示了如何选取元素、属性及内容,以及XPath表达式在不同情况下的返回值类型。还提到了使用etree.parse方法解析XML文件时需要注意的语法问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

案例 1

from lxml import etree

1将字符串编译成element对象

etree.HTML方法,是将内容解析成html文档 tree = etree.HTML(text)

print(tree) #<Element html at

2将element对象变成字符串的方法

html_str = etree.tostring(tree,pretty_print=True).decode('utf-8)
print(type(html_str)# bytes 需要加.decode(‘utf-8’)

element对象有xpath方法,可以用xpath方法进行查找元素

xpath方法返回都是一个list

ul = tree.xpath(’//div/ul’)[0]

print(ul)

选取属性

class_attr = ul.xpath(’//li[1]/@class’)

print(class_attr)

添加[0]后 [‘item-0’]

选取内容

选取class属性为item-1的li下面的a标签的内容

a_contents = tree.xpath(’//li[@class=“item-1”]/a/text()’) print(a_contents)

返回[‘second item’,‘fourth item’]

element对象xpath放来筛选,返回值都是list

xpath表达式最后一个是一个元素(标签),list中都是element元素

xpath表达式最后一个是属性,list都是属性字符串

xpath表达式最后一个是内容

案例 2 from lxml import etree

parse方法是按照xml的方式来解析,语法出问题,就会报错 html = etree.parse(‘demo.html’)

print(html) # 报错 少了个标签 成功 element对象

案例 1

HTML='''
html语法
'''
tree=etree.HTML(text)
所有的li标签
li_list=tree.xpath('//li')
获取li标签的所有class属性
li_class=tree.xpath('//li@class')
获取li标签下href为link1.html的a标签
a=tree.xpath('//li/a[@href="link1.html"])
获取li标签下的所有span标签包括孙子span
spans=tree.xpath('//li//span')
获取li标签下a标签的所有class
a_class=tree.xpath('//li//a@class')
获取最后一个li的a标签的href属性
a_href=tree.xpath('//li[last()]/a/@href')
获取倒数第二个元素的内容
element_c=tree.xpath('//*[last()-1]/text()')
获取class值为bold的标签名
tagname=tree.xpath('//*[@class="bold"]')
print(tagname.tage)  #标签元素.tag可以获取标签的内容

案例 2

html=
'''
html语法
'''
tree = etree.HTML(html)
# print(tree)
#(1)获取文档中的所有book节点的第一个book节点
first_book = tree.xpath('//bookstore/book[1]')
#(2)获取第一个book节点
first_book = first_book[0]
# print(first_book)
#(3)获取first_book当前节点下的href
href = first_book.xpath('.//@href')
# print(href)
#(4)获取当前节点的父节点下的book节点的href属性
hrefs = first_book.xpath('..//book/@href')
# print(hrefs)
#(5)获取价格小于40的书的书名
book_name = tree.xpath('//book[price<40]/title/text()')
# print(book_name)
#(6)获取价格等于99.95的书的书名
book_name = tree.xpath('//book[price=99.95]/title/text()')
# print(book_name)
#(7)获取book标签下面的title和price标签
result = tree.xpath('//book/title|//book/price')
# print(result)
#(8)获取属性href含有baidu字符串的book标签,获取此标签的书名
book_name = tree.xpath('//book[contains(@href,"baidu")]/title/text()')
# print(book_name)
#(9)获取前面两个属于bookstore标签的字标签的book标签,获取此标签的书名
book_names = tree.xpath('//bookstore/book[position()<3]/title/text()')
# print(book_names)
#(10)匹配任何属性节点
tags = tree.xpath('//*[@*]')
print(len(tags))
#(11)获取所有带有属性title标签,获取此标签的内容
name = tree.xpath('//title[@*]/text()')
# print(name)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值