xpath解析网页

分析 HTML 页面数据

我们可以使用 API 获取服务商提供数据的方法,这种方法获取到的数据非常干净,结构清晰。但在大多数情况下,各类网站为了保护自己的数据不轻易被别人获取,一般都不会轻易提供 API。而在这种情况下,我们拿到网页数据的常用方法就是直接解析页面数据。

网页是一个适用于万维网和网页浏览器的文件,它存放在世界某个角落的某一部或一组计算机中,而这部计算机必须是与互联网相连。网页经由网址(URL)来识别与访问,当我们在网页浏览器输入网址后,经过一段复杂而又快速的程序,网页文件会被传送到用户家的计算机,然后再通过浏览器解释网页的内容,再展示给用户。通常情况下,网络页面都是 HTML 格式。

HTML,又称超文本标记语言(英语:HyperText Markup Language)是一种用于创建网页的标准标记语言。HTML 是一种基础技术,常与 CSS、JavaScript 一起被众多网站用于设计令人赏心悦目的网页、网页应用程序以及移动应用程序的用户界面。网页浏览器可以读取 HTML 文件,并将其渲染成可视化网页。HTML 描述了一个网站的结构语义随着线索的呈现,使之成为一种标记语言而非编程语言。

所以说,凡是展示在页面上的内容,就会存在与网页的 HTML 文件中(不严谨)。通常情况下,你可以鼠标右键将当前页面保存为一个 HTML 文件。

HTML界面与xpath

XPath (XML Path Language) 是一门路径提取语言,最初被设计用来从 XML 文档中提取部分信息,现在它的这套提取方法也可以用于 HTML 文档上。下面我们通过一个例子来看看这些规则的用法。

假设有下面这样一份 HTML 文档,它列出了一些世界知名的 IT 公司及其相关信息。

<!DOCTYPE html>
<html>
<head>
  <title>xpath</title>
</head>
<body>
  <div class="companies">
    <div class="company">
      <h2>阿里巴巴</h2>
      <a href="alibaba.com"><img src="alibaba.jpg"></a>
      <p class="location">杭州</p>
    </div>
    <div class="company">
      <h2>腾讯</h2>
      <a href="qq.com"><img src="qq.jpg"></a>
      <p class="location">深圳</p>
    </div>
    <div class="company">
      <h2>Facebook</h2>
      <a href="facebook.com"><img src="facebook.jpg"></a>
      <p class="location">硅谷</p>
    </div>
    <div class="company">
      <h2>微软</h2>
      <a href="microsoft.com"><img src="microsoft.jpg"></a>
      <p class="location">西雅图</p>
    </div>
  </div>
</body>
</html>

在使用 XPath 前,大家首先要把几个概念弄明白。首先是 节点(node),以上面的 HTML 文档为例子,每个标签都是一个节点,比如:

<div class="company">
  <h2>腾讯</h2>
    <img src="tencent.jpg">
  <p class="location">深圳</p>
</div>


 <div class="companies">
    <div class="company">
      <h2>阿里巴巴</h2>
      <a href="alibaba.com"><img src="alibaba.jpg"></a>
      <p class="location">杭州</p>
    </div>
    #可以看到都是这样子组成的

我们以蓝桥官网为例子,我直接用自己看资料的地方了

import requests

content = requests.get(url="https://www.lanqiao.cn/courses/")  # 请求蓝桥云课课程页面
content
from lxml import etree

tree = etree.HTML(content.text) #etree.HTML()是lxml库中的一个函数,用于解析HTML字符串
paragraphs = tree.xpath('//div[@data-v-afd1ffbc]')#这个操作得到了所有div[@data-v-afd1ffbc]标签列表
print(paragraphs)
#这个代码中我们直接使用了xpath对网页进行解析

正式进入xpath

  1. 基本概念:
    • 节点(Node): 文档中的主要构成单位,如元素节点、属性节点和文本节点,比如刚刚的HTML网页中的各种标签,xpath就是按照解析HTML的标签形式来的。
    • 路径表达式(Path Expression): 用于选取 XML 文档中的节点或节点集的表达式,比如刚刚的腾讯可以写成 \body\div[‘@class=companies’]\div[‘@class=company’]。这个路径就是对应着那些公司的,你会发现每个公司都可以按照这个路径,按照这个路径可以得到一个结果的集合
<div class="company">
  <h2>腾讯</h2>
    <img src="tencent.jpg">
  <p class="location">深圳</p>
</div>
  1. 常见的 XPath 表达式:
    • nodename: 选取此节点的所有子节点。
    • /: 从根节点选取。
    • //: 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
    • .: 选取当前节点。
    • ..: 选取当前节点的父节点。
    • @: 选取属性。
  2. 选择节点:
    • 选取指定节点: /html/body/div 选取 <html> 下的 <body> 下的所有 <div>
    • 使用谓词: /html/body/div[1] 选取 <body> 下的第一个 <div> 节点。
    • 选取多个路径: //div | //p 选取文档中所有 <div><p> 节点。
  3. 通配符:
    • *: 匹配任何元素节点。
    • @*: 匹配任何属性节点。
    • node():匹配任何类型的节点。
  4. 选取未知节点:
    • //div/*: 选取所有属于 <div> 的子元素的节点。
    • //*: 选取文档中所有元素。
    • //title[@*]: 选取所有带有任何属性的 <title> 元素。
  5. XPath 函数:
    • text(): 获取节点的文本内容,如 //div/text()
    • contains(@attr, 'string'): 检查属性 attr 是否包含字符串 string
    • starts-with(@attr, 'string'): 检查属性 attr 是否以字符串 string 开头。
  6. 使用 XPath 的工具:
    • 在 Python 中,可以使用 lxmlBeautifulSoup 库结合 XPath 进行网页解析。
    • 浏览器开发者工具中也常包含 XPath 选择器功能,便于测试和调试 XPath 表达式。
from lxml import etree

tree = etree.HTML(content.text) #etree.HTML()是lxml库中的一个函数,用于解析HTML字符串
paragraphs = tree.xpath('你的路径')#这个操作得到了所有路径下的标签列表,只要能按照这个路径就可以得到
  • 22
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值