代码使用Xpath

2019-05-31  本文已影响0人  hcc_9bf4

代码中使用xpath
from lxml import etree
两种方式使用:将html文档变成一个对象,然后调用对象的方法去查找指定的节点

  1. 本地文件
    tree=etree.parse(文件名)
  2. 网络文件
    tree=etree.HTML(网页字符串)
    ret=tree.xpath(路径表达式) ret 是一个列表
    例如:ret=tree.xpath('//div[@class="tang"]/ul/li[1]/text()')

找href属性:
ret=tree.xpath('//div[@class="tang"]/ul/li[last()]/a/@href')
ret=tree.xpath('//div[@class="tang"]/ul//a/@href')

逻辑运算本地实例:
ret=tree.xpath('//div[@class="tang"]/ul//li[@class="love" and @name="yang"]/text()')
打印love和name属性的文本

模糊匹配实例:
ret=tree.xpath('//li[contains(@class,"li")]/text()')
打印所有带li的文本
ret=tree.xpath('//li[contains(text(),"爱")]/text()')
打印li标签下所有带‘爱’字文字
ret=tree.xpath('//li[starts-with(@class,"ba")]/text()')
打印属性以ba开头的标签内容

找内容:
ret=tree.xpath('//div[@class="song"]/text()')
获取到不含标签的内容
ret=tree.xpath('//div[@class="song"]//text()')
获取到包含标签的内容

另一种取内容方式:连起来

from lxml import etree
tree=etree.parse('xpath.html')
ret=tree.xpath('//div[@class="song"]')
string=ret[0].xpath('string(.)')
print(string)
print(string.replace('\n','').replace('\t',''))

结果:

        火药
        指南针
        印刷术
        造纸术 

火药指南针印刷术造纸术
[Finished in 0.2s]

本地xpat.htm代码示例:

<html lang="en">
<head>
    <meta charset="UTF-8" />
    <title>xpath测试</title>
</head>
<body>
    <div class="song">
        火药
        <b>指南针</b>
        <b>印刷术</b>
        造纸术
    </div>
    <div class="tang">
        <ul>
            <li class="balove">停车坐爱枫林晚,霜叶红于二月花</li>
            <li id="hua"> 商女不知亡国恨,隔江犹唱后庭花</li>
            <li class="love" name="yang">一骑红尘妃子笑,无人知是荔枝来</li>
            <li id="bei">葡萄美酒夜光杯,欲饮批把马上催</li>
        <li><a href="http://www.baidu.com/">百度一下</a></li>
        </ul>
        <ol>
            <li class="lucy">寻寻觅觅,冷冷清清,凄凄惨惨器器</li>
            <li class="balili">咋暖还寒时候,最难将息</li>
            <li class="lilei">怎敌他晚来风急</li>
            <li>雁过也,正伤心</li>
            <li>爱情三十计</li>
            <li>爱就一个字</li>
        </ol>
    </div>
</body>
</html>
上一篇下一篇

猜你喜欢

热点阅读