lxml 模块的 XPath基础语法

基础三大类

  • 层级:// 跳级,/ 直接子类,.. 上一级
  • 属性:@ 属性访问
  • 函数:text() 获取文字,@href 获取href属性值

使用方法

# 获取 含有 class="nav" 的 div 标签下的文本
//div[@class="nav"]/text()

# 获取 <div id="link">...</div> ——> ul ——> li ——> a 的 title 属性
//div[@id="link"]/ul/li/a/@title

# 获取 <div id="link">...</div> ——> ul ——> 第二个li ——> a 的 href 属性
//div[@id="link"]/ul/li[2]/a/@href

测试代码

from lxml import etree

text = """
<div class="wrapper">
    <div class="nav">新浪微博</div>
    <div id="link">
        <ul id="">
            <li><a href="#" title="国内">国内</a></li>
            <li><a href="#" title="国际">国际</a></li>
            <li><a href="#" title="军事">军事</a></li>
        </ul>
    </div>
</div>
"""

# 创建html对象
html = etree.HTML(text)

# 获取 含有 class="nav" 的 div 标签下的文本
results = html.xpath('//div[@class="nav"]/text()')
print(results)
# 获取 <div id="link">...</div> ——> ul ——> li ——> a 的 title 属性
results2 = html.xpath('//div[@id="link"]/ul/li/a/@title')
print(results2)
# 获取 <div id="link">...</div> ——> ul ——> 第二个li ——> a 的 href 属性
results3 = html.xpath('//div[@id="link"]/ul/li[2]/a/@href')
print(results3)

运行结果

['新浪微博']
['国内', '国际', '军事']
['#']

发表评论 / Comment

用心评论~