python使用xpath解析html
2023-12-27 22:52:22
一、安装包
pip install lxml
二、读取
1、读取解析出来多条
from lxml import etree
# HTML 或 XML 文档示例
html_content = '''
<html>
<body>
<div>
<p>Paragraph 1</p>
<a href="#">Link 1</a>
</div>
<div>
<p>Paragraph 2</p>
<a href="#">Link 2</a>
</div>
</body>
</html>
'''
# 将文档内容加载到 etree 对象中
tree = etree.HTML(html_content)
# 使用 XPath 查询
elements = tree.xpath('/html/body/div/a') # 示例 XPath 查询
for element in elements:
print(etree.tostring(element, encoding='utf-8').decode('utf-8')) # 输出查询到的元素
2、读取一条
from lxml import etree
# HTML示例
html_content = '''
<html>
<body>
<div>
<p>Paragraph 1</p>
<a href="#">Link 1</a>
</div>
<div>
<p>Paragraph 2</p>
<a href="#">Link 2</a>
</div>
</body>
</html>
'''
# 将文档内容加载到etree对象中
tree = etree.HTML(html_content)
# 使用find方法选择第一个匹配的元素
element = tree.find('.//div/a') # 示例XPath查询(相对路径) # 示例XPath查询
if element is not None:
print(etree.tostring(element, encoding='utf-8').decode('utf-8')) # 输出查询到的元素
在XPath查询中,‘.’ 表示当前节点,‘//’ 表示选择所有符合条件的后代节点。.//div/a 将选择文档中所有
元素下的第一个
元素。这个查询应该能够正确执行并返回第一个匹配的元素。如果有两个那么就是查出来第一个就停止了
3、获取文本内容(.text)
import requests
from lxml import etree
html_content = '''
<html>
<body>
<div>
<p>Paragraph 1</p>
<a href="#">Link 1</a>
</div>
<div>
<p>Paragraph 2</p>
<a href="#">Link 2</a>
</div>
</body>
</html>
'''
# 将文档内容加载到etree对象中
tree = etree.HTML(html_content)
# 使用find方法选择第一个匹配的元素
element = tree.find('.//div/a') # 示例XPath查询(相对路径)
if element is not None:
print(element.text) # 输出查询到的元素的文本内容
4、获取标签(.tag)
from lxml import etree
# HTML示例
html_content = '''
<html>
<body>
<div>
<p>Paragraph 1</p>
<a href="#">Link 1</a>
</div>
<div>
<p>Paragraph 2</p>
<a href="#">Link 2</a>
</div>
</body>
</html>
'''
# 将文档内容加载到etree对象中
tree = etree.HTML(html_content)
# 使用XPath选择器找到所需元素
element = tree.xpath('.//div/a')[0] # 示例XPath查询(相对路径)
# 构造新的element,只包含开始和结束标签
tag = element.tag # 获取标签名称
start_tag = f'<{tag}>'
end_tag = f'</{tag}>'
print(start_tag + end_tag) # 输出 <a></a>
5、获取所有图片
from lxml import etree
# 假设html_content为你的HTML内容
html_content = """
<html>
<body>
<div>
<img src="image1.jpg">
<img src="image2.jpg">
<img src="image3.jpg">
</div>
</body>
</html>
"""
# 解析HTML内容
tree = etree.HTML(html_content)
# 使用XPath获取所有图片链接 表达式为@属性的获取出来的都是文本不是对象不用转换字符串
image_links = tree.xpath("//img/@src")
# 输出图片链接
print(image_links)
或者
import requests
from lxml import etree
headers = {
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}
# 网址你自己换一个xpath的话就改下
response = requests.get("https://www.tianqi.com/", headers=headers)
body = etree.HTML(response.text)
elements = body.xpath('//*[@id="hhx_newDaodu_l"]/img[2]')
for element in elements:
print(element.get("src")) # 输出查询到的元素
三、xpath语法规则
浏览器可以右键获取
文章来源:https://blog.csdn.net/weixin_49390750/article/details/135248682
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!