Python爬虫学习记录- XPath库的使用1

187 阅读1分钟

这是我参与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"))

这个输出的结果是

image.png 给出的代码,故意少写了最后一个的闭合标签,可以看到,最后是帮我们补全了

etree模块,调用HTML类进行初始化,这样就成功构造了一个XPath的解析对象,需要注意的是,它可以自己修正HTML文本,并添加了html标签,body

所有节点

from lxml import    etree
html = etree.parse('./test.html',etree.HTMLParser())

result = html.xpath('//*')
print(result)

运行结果:

image.png

这里使用的是*号,意味是匹配所有的节点,获取了所有的节点,每个元素都是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.