这是我参与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)
得到的结果:
没有得到我们想要的结果,这时候我们需要用到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方法,第一个参数传入的是属性名,第二个参数传入的是属性值,也就是包含我输入的属性值,就可以完成匹配了. 得到的结果:
这个方法常常用来摸个节点的某个属性有多个值的时候用到.
多属性匹配
如代码所示<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这个库.