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)!