自学内容网 自学内容网

XPath使用方法

 介绍 

        XPath(XML Path)是一种查询语言,它能在XML(Extensible Markup Language,可扩展标记语言)和HTML的树状结构中寻找结点。

        在Python中,为了使用XPath,需要安装一个第三方库:lxml。

使用

模版:

        # 专门用于解析和处理 HTML 的模块

        import lxml.html       

        # 接受 HTML 文本并将其解析为一个可以使用 XPath 表达式进行查询的树状结构

        selector = lxml.html.fromstring('网页源代码') 

        # 使用 XPath 表达式来提取 HTML 文档中的特定内容

        info = selector.xpath('Xpath表达式')     

Xpath表达式:

        # 获取文本

         //标签1[@属性1="属性值1"]/标签2[@属性2="属性值2"]/..../text()

        # 获取属性
        //标签1[@属性1="属性值1"]/标签2[@属性2="属性值2"]/..../@属性n

        

@属性="属性值"]不是必需的。它的作用是帮助过滤相同的标签。在不需要过滤相同标签的情况下可以省略。


标签1 的选择需要拥有“标志性属性值的标签”,以快速定位。

没有属性或者属性都相同的标签可以忽略,如<ul>

特殊情况

 当属性以相同字符串开头:

        //标签[starts-with(@属性名,"相同的开头部分")]

属性值包含相同字符串:

        寻找属性值包含某些字符串的元素时,XPath的写法格式和以某些字符串开头的写法格式是相同的,只不过关键字从“starts-with”变成了“contains”

XPath也支持先抓大再抓小

不同标签下的文字:

        使用string(.)关键字获取所有文本信息

示例 

import lxml.html

# HTML1: 提取以 "test_" 开头的 div 元素的文本内容
html_content1 = """
    <! DOCTYPE html>
    <html>
    <head lang="en">
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <div id="test_1">内容1</div>
        <div id="test_2">内容2</div>
        <div id="test_unit">内容3</div>
        <div id="useless">不需要的内容</div>
    </body>
    </html>
"""

# 解析 HTML 内容
parsed_html1 = lxml.html.fromstring(html_content1)

# 使用 XPath 提取以 "test_" 开头的 div 元素的文本内容
test_div_texts = parsed_html1.xpath('//div[starts-with(@id, "test_")]/text()')

# 输出提取到的文本内容
for text in test_div_texts:
    print(text)


# HTML2: 提取指定 id 的 div 元素的完整文本内容
html_content2 = """
    <! DOCTYPE html>
    <html>
    <head lang="en">
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <div id="test">
          我左青龙,
          <span id="continue">
              右白虎,
              <ul>上朱雀,
                  <li>下玄武。</li>
              </ul>
              老牛在当中,
          </span>
          龙头在胸口。
        </div>
    </body>
    </html>
"""

# 解析 HTML 内容
parsed_html2 = lxml.html.fromstring(html_content2)

# 使用 XPath 提取 id 为 "test" 的 div 元素
test_div_element = parsed_html2.xpath('//div[@id="test"]')[0]

# 提取该元素的完整文本内容
full_text_content = test_div_element.xpath('string(.)')

# 输出完整的文本内容
print(full_text_content)

原文地址:https://blog.csdn.net/weixin_74254879/article/details/140675994

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!