XPath

from lxml import etree

html = '''
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <div>
            <ul>
                <li class="class1"><a href="class1.html">1</a><>
                <li class="class2"><a href="class2.html">2</a><>
                <li class="class3"><a href="class3.html">3</a><>
                <li class="class4"><a href="class4.html">4</a><>
                <li class="class5"><a href="class5.html">5</a><>
                <li>
                    <ul>
                        <li class="class1"><a href="class6.html">6</a><>
                        <li class="class7"><a href="class7.html">7</a><>
                        <li class="class8"><a href="class8.html">8</a><>
                    </ul>
                <>
            </ul>
        <div>
    </body>
    <ml>
'''

# 解析页面
html = etree.HTML(html)
#
# 取根节点
a = html.xpath('/html')
print(a)

# 取任意一个位置ul的节点内容
a1 = html.xpath('//ul')
print(a1)

# 取的是html/body/div下面紧接着的ul节点内容
a2 = html.xpath('/html/body/div/ul')
print(a2)

for i in a1:
    print(i)
    print(i.xpath('li'))
    print(i.xpath('li/a'))

    # text()取a标签中的值
    print(i.xpath('li/a/text()'))

    # @ 取属性
    print(i.xpath('li/a/@href'))


# 取任意一个位置,且class属性为class1de标签内容
a3 = html.xpath('//*[@class="class1"]')
print(a3)

for i in a1:
    print(i)

    # . 表示当前节点内容
    print(i.xpath('.'))
    print('--------------------------------------------------------')

    #  .. 表示上一个节点内容
    print(i.xpath('..'))
    print('-----------------------------------')
    print(i.xpath('../..'))


    # 第一个ul下的第三个li节点内容
a4 = html.xpath('/html/body/div/ul/li[3]/a/text()')
a5 = html.xpath('//*[@class="class3"]/a/text()')
print(a4)
print(a5)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值