这是我参与2022首次更文挑战的第24天,活动详情查看:2022首次更文挑战
今天,感觉比之前要好多了,工作上有大佬帮忙去解决问题了.下次争取自己去解决问题.面向Project编程真的是最快的学习方式了.
XPath使用
XPath是 XML Path Language ,用来在XML文件中来寻找信息的.也同样适用于HTML ]
常用规则
表达式 | 说明 |
---|---|
nodename | 选取此节点的所有子节点 |
/ | 从当前节点的选子节点 |
// | 从当前节点的选子孙节点 |
. | 选择当前节点 |
.. | 选取当前节点的上一级,就是父节点 |
@ | 选取属性 |
举个例子:
//title{@lang='eng']
这意思就应该是选取所用名叫title的属性值lang='eng'的节点
安装XPath
pip3 install lxml
开始动手实践
from lxml import etree
text = '''
<div>
<ul>
<li class="item-0"><a href="link1.html">first item</a></li>
<li class="item-1"><a href="link2.html">first item</a></li>
<li class="item-inactive"><a href="link3.html">first item</a></li>
<li class="item-1"><a href="link4.html">first item</a></li>
<li class="item-0"><a href="link5.html">first item</a>
</ul>
</div>
'''
html = etree.HTML(text)
result = etree.tostring(html)
print(result.decode("utf-8"))
这个输出的结果是
给出的代码,故意少写了最后一个的闭合标签,可以看到,最后是帮我们补全了
etree模块,调用HTML类进行初始化,这样就成功构造了一个XPath的解析对象,需要注意的是,它可以自己修正HTML文本,并添加了html标签,body
所有节点
from lxml import etree
html = etree.parse('./test.html',etree.HTMLParser())
result = html.xpath('//*')
print(result)
运行结果:
这里使用的是*号,意味是匹配所有的节点,获取了所有的节点,每个元素都是Element类型,类型HTML.body,DIV...
子节点
from lxml import etree
html = etree.parse('./test.html',etree.HTMLParser())
result = html.xpath('//li/a')
print(result)
这里通过追加/a的方式,选择了所有的li节点下的子节点a.