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

246 阅读1分钟

这是我参与2022首次更文挑战的第27天,活动详情查看:2022首次更文挑战

一别两天,两天没更新,腰疼,程序员这个职业还是要多动动,多喝水 钱是别人的,身体才是自己的 前几天从崔老师的书上学到了属性获取,几天去学习一下后面的内容.

属性多值匹配

有的时候并不是一个节点中只有一个元素,有两个元素的时候该怎么办呢? 我们自然会想到之前获取的方法:

from lxml import etree

text = '''<li class="li li-first"> <a href="link.html">first item </a></li>'''
html =etree.HTML(text)
result = html.xpath('//li[@class="li"]/a/text()')
print(result)

得到的结果:

image.png 没有得到我们想要的结果,这时候我们需要用到contains方法,上面代码可以写成,

from lxml import etree

text = '''<li class="li li-first"> <a href="link.html">first item </a></li>'''
html =etree.HTML(text)
result = html.xpath('//li[contains(@class,"li")]/a/text()')
print(result)

上面使用了,contains方法,第一个参数传入的是属性名,第二个参数传入的是属性值,也就是包含我输入的属性值,就可以完成匹配了. 得到的结果:

image.png 这个方法常常用来摸个节点的某个属性有多个值的时候用到.

多属性匹配

如代码所示<li>标签有两个属性名,class和name,我们可以通过and来写多个属性值

from lxml import etree

text = '''<li class="li li-first" name="item"> <a href="link.html">first item </a></li>'''
html =etree.HTML(text)
result = html.xpath('//li[contains(@class,"li") and @name="item"]/a/text()')
print(result)

此处还有许多运算符,加减乘除啥的

xpath非常强大,有上百种方法,目前只学习了简单的用法,可以提高获取HTML信息的效率,明后天接着跟着崔老师的书学习Beautiful Soup这个库.