【愚公系列】《Python网络爬虫从入门到精通》014-XPath解析

标题 详情
作者简介 愚公搬代码
头衔 华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。
近期荣誉 2022年度博客之星TOP2,2023年度博客之星TOP2,2022年华为云十佳博主,2023年华为云十佳博主,2024年华为云十佳博主等。
博客内容 .NET、Java、Python、Go、Node、前端、IOS、Android、鸿蒙、Linux、物联网、网络安全、大数据、人工智能、U3D游戏、小程序等相关领域知识。
欢迎 👍点赞、✍评论、⭐收藏


🚀前言

在现代网页开发和数据抓取中,获取和处理网页中的信息是非常关键的一环。而在众多的数据提取技术中,XPath(XML Path Language)以其强大的选择能力和灵活性,成为了网页解析的重要工具。无论是提取特定元素的文本内容,还是获取复杂结构中的数据,掌握XPath的使用都能大幅提高我们的数据处理效率。

在本期文章中,我们将深入探讨XPath解析的基本概念和应用技巧。我们将介绍XPath的语法、常用函数及其在Python中的实现方法,帮助你快速上手并应对各种数据提取的需求。通过具体的实例演示,我们将展示如何利用XPath解析网页,提取所需的信息,并为后续的数据分析和处理做好准备。

🚀一、XPath解析

🔎1.XPath 概述

🦋1.1 XPath 是什么?

  • 全称:XML Path Language
  • 功能:在 XML/HTML 中通过路径表达式定位节点
  • 特性:
    • 支持 100+ 内建函数(字符串、数值、逻辑处理等)
    • W3C 标准(1999年发布)
    • 路径表达式简洁高效

🦋1.2 常用路径表达式

表达式 描述
nodename 选取当前节点的所有子节点
/ 从根节点开始直接子节点
// 从当前节点选取所有子孙节点
. 当前节点
.. 父节点
@ 选取属性
* 通配符(匹配所有节点)

🔎2.XPath 解析操作

🦋2.1 解析 HTML

☀️2.1.1 parse() 方法
  • 功能:解析本地 HTML 文件
  • 示例:
    from lxml import etree
    parser = etree.HTMLParser()
    html = etree.parse('demo.html', parser=parser)
    html_str = etree.tostring(html, encoding="utf-8").decode('utf-8')
    print(html_str)
    
    在这里插入图片描述
☀️2.1.2 HTML() 方法
  • 功能:解析字符串或网络返回的 HTML

  • 示例:

    from lxml import etree    # 导入etree子模块
    # 定义html字符串
    html_str = '''             
    <title>标题文档</title>
    </head>
    <body>
    <img src="./demo_files/logo1.png" />
    <br />
    hello 明日科技 ~
    </body></html>'''
    html = etree.HTML(html_str)    # 解析html字符串
    html_txt = etree.tostring(html,encoding = "utf-8")   # 转换字符串类型,并进行编码
    print(html_txt.decode('utf-8'))    # 打印解码后的HTML代码
    

    在这里插入图片描述

  • 功能:解析服务器返回的 HTML

  • 示例:

    from lxml import etree    # 导入etree子模块
    import requests          # 导入requests模块
    from requests.auth import HTTPBasicAuth  # 导入HTTPBasicAuth类
    # 定义请求地址
    url = 'http://sck.rjkflm.com:666/spider/auth/'
    ah = HTTPBasicAuth('admin','admin')      # 创建HTTPBasicAuth对象,参数为用户名与密码
    response = requests.get(url=url,auth=ah) # 发送网络请求
    if response.status_code==200:            # 如果请求成功
        html = etree.HTML(response.text)    # 解析html字符串
        html_txt = etree.tostring(html,encoding = "utf-8")   # 转换字符串类型,并进行编码
        print(html_txt.decode('utf-8'))    # 打印解码后的HTML代码
    

    在这里插入图片描述

🦋2.2 获取节点

☀️2.2.1 所有节点
from lxml import etree    # 导入etree子模块
# 定义html字符串
html_str = '''
<div class="level_one on">
<ul>
<li> <a href="/index/index/view/id/1.html" title="什么是Java" class="on">什么是Java</a> </li>
<li> <a href="javascript:" onclick="login(0)" title="Java的版本">Java的版本</a> </li>
<li> <a href="javascript:" onclick="login(0)" title="Java API文档">Java API文档</a> </li>
<li> <a href="javascript:" onclick="login(0)" title="JDK的下载">JDK的下载</a> </li>
<li> <a href="javascript:" onclick="login(0)" title="JDK的安装">JDK的安装</a> </li>
<li> <a href="javascript:" onclick="login(0)" title="配置JDK">配置JDK</a> </li>
</ul>
</div>
'''
html = etree.HTML(html_str)    # 解析htm
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

愚公搬代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值