欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

xpath工具(解析)

程序员文章站 2022-05-02 22:46:05
...
  • 在XML文档中查找信息的语言,同样适用于HTML文档的检索 xpath辅助工具 chrome插件:Xpath Helper
  • 打开/关闭:Ctrl + shift + x
    Firefox插件:XPath Checker
    XPath编辑工具:XML quire
    匹配演示
    1. 查找所有的book节点 : //book

查找所有book节点下的title子节点中,lang属性为"en"的节点

//book/title[@lang=“en”]

  1. 查找bookstore下的第2个book节点下的title子节点 /bookstore/book[2]/title

  2. 选取节点 // : 从整个文档中查找节点 //price //book//price @ : 选取某个节点的属性值 //title[@lang=“en”]

  3. @的使用

  4. 选取1类节点 : //title[@lang=“en”]

  5. 选取存在某个属性节点: //title[@lang]

  6. 选取节点的属性值: //title/@lang

  7. 匹配多路径 :|

  8. xpath表达式1 | xpath表达式2

  9. 获取所有book节点下的title子节点和price子节点 //book/title | //book/price

xpath函数
contains():匹配一个属性值中包含某些字符串的节点
//title[contains(@lang,“e”)]
//div[contains(@class,“njjzw”)]

text():获取文本 //title[contains(@lang,"e")]/text() lxml库及xpath使用 安装 管理员 Prompt : conda install lxmlPrompt : conda install lxml 使用流程

导模块
from lxml import etreefrom lxml import etree
创建解析对象
parseHtml = etree.HTML(html)
调用xpath
rList=parseHtml.xpath(‘xpath表达式’)

## 只要调用了xpath,结果一定是列表 ##
from lxml import etree

html = '''
<div class="wrapper">
    <i class="iconfont icon-back" id="back"></i>
    <a href="/" id="channel">新浪社会</a>
    <ul id="nav">
        <li><a href="http://domestic.firefox.sina.com/" title="国内">国内</a></li>
        <li><a href="http://world.firefox.sina.com/" title="国际">国际</a></li>
        <li><a href="http://mil.firefox.sina.com/" title="军事">军事</a></li>
        <li><a href="http://photo.firefox.sina.com/" title="图片">图片</a></li>
        <li><a href="http://society.firefox.sina.com/" title="社会">社会</a></li>
        <li><a href="http://ent.firefox.sina.com/" title="娱乐">娱乐</a></li>
        <li><a href="http://tech.firefox.sina.com/" title="科技">科技</a></li>
        <li><a href="http://sports.firefox.sina.com/" title="体育">体育</a></li>
        <li><a href="http://finance.firefox.sina.com/" title="财经">财经</a></li>
        <li><a href="http://auto.firefox.sina.com/" title="汽车">汽车</a></li>
    </ul>
    <i class="iconfont icon-liebiao" id="menu"></i>
</div>'''
# 创建解析对象(etree.HTML())
parseHtml = etree.HTML(html)
# 解析对象调用xpath()
# 1. 匹配出所有的 href 的值
r1 = parseHtml.xpath('//a/@href')
#print(r1)
# 2. 把href中的 / 匹配出来
r2 = parseHtml.xpath(
 '//div[@class="wrapper"]/a/@href')
#print(r2)
# 3. 把href中的非 / 匹配出来
r3 = parseHtml.xpath(
   '//ul[@id="nav"]/li/a/@href')
#print(r3)

# 4. 获取所有a节点的文本内容
r4 = parseHtml.xpath('//a/text()')
#print(r4)
# 5. 获取所有a节点文本内容(不包括最上面的新浪社会)
r5 = parseHtml.xpath(
    '//ul[@id="nav"]/li/a')
for s in r5:
    print(s.text)
相关标签: Xpath