爬虫 xpath基础

爬虫 xpath

【一】介绍

【1】说明

  • xpath全程XML Path Language,即XML路径语言用于确定XML文档中某部分位置的语言

  • 主要用途

    • 定位节点:通过节点名称、节点路径、节点属性等方式定位
    • 选择节点:根据节点的属性、节点的文本内容、节点的位置等条件选择
    • 提取数据:通过定位和选择节点,从XML文档中提取所需要的数据,并进一步分析
  • 对比正则表达式

    • xpath在网页分析中占据主导位置

【2】安装引入

  • 安装
pip install lxml
  • 导入
from lxml import etree
tree = etree.HTML(页面源码)

【二】XPath路径表达式

【1】基本路径表达式

  • /:从根节点开始选取
    • 例如:/body/div
      • 选取根节点下的body下的所有div标签
  • //:选取文档中任意位置的元素
    • 例如://div
      • 选取全文档的所有div标签
  • .:表示当前节点
    • 例如:./div
      • 选取当前节点下的所有div标签
  • @:选取属性
    • 例如://@href
      • 选取全文档的href属性内容,是个列表
  • …:父节点
    • 例如://a[1]/…
      • 返回第一a标签的父节点

【2】位置与条件选取[]

  • []:通过索引或者条件选取,索引从1开始

    • 例如://div[1]
    • 选取第一个div
  • 条件:

    • last():选取最后一个元素
      • 例如://div[last()]
        • 选取最后一个div
      • 例如://div[last() - 1]
        • 选取倒数第二个div
    • position():基于位置的选择
      • 例如://div[position <= 2]
        • 选择前两个div
    • @:配合属性选择
      • 例如://div[@title]
        • 选择含有title属性的div
      • 例如://div[@price > 9.99]
        • 选择含有price且大于9.99的所有div
  • 模糊查询

    • contains:包含的关系
      • 例如://div[contains(@id, ‘dd’)]
        • 查询所有ID包含dd的div
    • starts-with:以什么开头
      • 例如://div[starts-with(@id, ‘dd’)]
        • 查询所有ID以dd开头的div

【3】通配符

  • *:匹配任意元素
    • 例如:/div/*
      • 选择div下面的所有直接子元素
  • @*:匹配任意属性
    • 例如:/div/@*
      • 返回div的所有属性值。是一个列表
    • 例如://title[@*]
      • 返回的是所有带属性的title标签
  • node():返回所有的直接子元素
    • 例如:/div/node()
      • 返回div下的所有内容
      • 包括文本、注释、换行、标签

【4】逻辑运算

  • |:若干路径或选择

    • 例如://book/title | //book/price
      • 选取book元素的所有title和price
      • 满足一个条件即可
  • and:条件并列

    • 例如://div[@id=‘d1’ and @class=‘c1’]
      • 选择满足id是d1且class是c1的div

【5】获取文本内容

  • text():获取文本内容
  • 方法一:写在xpath中
    • 内部可以执行for循环
  • 方法二:写在xpath外
    • 需要手写for循环
from lxml import etreehtml = """
<div>
<p>杰弗里</p>
<p>一套豪华的六居室别墅</p>
</div>"""
tree = etree.HTML(html)
# 写在xpath中
text_list = tree.xpath('//div/p/text()')
print(text_list)  # ['杰弗里', '一套豪华的六居室别墅']
# 写在xpath外面
p_list = tree.xpath('//div/p')
for p in p_list:print(p.text)  # 杰弗里 # 一套豪华的六居室别墅

【6】节点轴选择

# 获取a标签的所有祖先节点
ancestors = html.xpath('//a/ancestor::*')
# 获取a标签的祖先节点中的div
div_ancestor_node = html.xpath('//a/ancestor::div')
# 获取第一个a标签的所有属性值
attribute_values = html.xpath('//a[1]/attribute::*')
# 获取第一个a标签的所有子节点
child_nodes = html.xpath('//a[3]/child::*')
# 获取第六个a标签的所有子孙节点
descendant_nodes = html.xpath('//a[3]/descendant::*')
# 获取第一个a标签之后的所有子孙节点
following_nodes = html.xpath('//a[1]/following::*')
# 获取第一个a标签之后的同级节点
following_sibling_nodes = html.xpath('//a[1]/following-sibling::*')

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/810475.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL一些特殊功能的索引(6/16)

特殊功能性索引 B-Tree索引&#xff1a; InnoDB的默认索引类型&#xff0c;适用于多种查询操作。 可以用于等值查询、范围查询和索引列的组合查询。 创建B-Tree索引的示例&#xff1a; CREATE INDEX index_name ON table_name (column1, column2);全文索引&#xff08;FULLTEX…

数字图像处理项目——模糊图像边缘检测算法设计及实现(论文/代码)

完整的论文代码见文章末尾 以下为部分内容 摘要 本研究旨在针对大脑核磁图像中的黑色腔体进行有效分割&#xff0c;以提供可靠的腔体定位和分析。为此&#xff0c;采用了三种常用的图像分割方法&#xff1a;8邻域区域生长法、Canny算子边缘检测和8邻域边界跟踪法。 首先&…

智算时代的基础设施如何实现可继承可演进?浪潮云海发布 InCloud OS V8 新一代架构平台

从 2023 年开始持续火爆的 AIGC 正在加速落地应用&#xff0c;为全行业带来生产生活效率的变革与升级。面对数字化转型与智能化转型&#xff0c;对于技术团队来说&#xff0c;既要根据业务与 AI 应用去部署以云为基础的 AI 算力&#xff0c;又要与已有数据和系统&#xff08;甚…

酒店大厅装水离子雾化壁炉前和装后对比

在酒店大厅装水离子雾化壁炉之前和之后&#xff0c;大厅的氛围和体验会有显著的对比&#xff1a; 装水离子雾化壁炉之前&#xff1a; 传统感&#xff1a;在壁炉安装之前&#xff0c;大厅可能会有传统的装饰或者简单的暖气设备&#xff0c;缺乏现代化的元素。这种传统感可能会…

纯css实现switch开关

代码比较简单&#xff0c;有需要直接在下边粘贴使用吧~ html: <div class"switch-box"><input id"switch" type"checkbox"><label></label></div> css&#xff1a; .switch-box {position: relative;height: 25px…

C-开发 visual Studio扩展插件介绍-格式化插件Xaml Styler、CSharpier介绍(扩展插件安装方法)

C#开发 visual Studio扩展插件介绍 扩展插件安装方法Xaml StylerCSharpier 提高C#开发效率常用的插件 扩展插件安装方法 菜单栏点击“扩展”→“管理扩展”。 打开扩展页面 右上角搜索需要安装的插件&#xff0c;然后点击下载 安装完成后&#xff0c;根据提示关闭VS进行安…

记一次小郭被挖矿后的应急响应

谨以此篇纪念我第n1次被挖矿经历。 时间&#xff1a;2024年3月18日&#xff08;星期一&#xff09; 地点&#xff1a;阿里云服务器 响应&#xff1a;确认–>抑制–>消除–>恢复–>总结 确认阶段&#xff1a; 2024年3月18日星期一早上收到了阿里云的短信和邮件…

【图论】Leetcode 200. 岛屿数量【中等】

岛屿数量 给你一个由 ‘1’&#xff08;陆地&#xff09;和 ‘0’&#xff08;水&#xff09;组成的的二维网格&#xff0c;请你计算网格中岛屿的数量。 岛屿总是被水包围&#xff0c;并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。 此外&#xff0c;你可以…

html+javascript,用date完成,距离某一天还有多少天

图片展示: html代码 如下: <style>* {margin: 0;padding: 0;}.time-item {width: 500px;height: 45px;margin: 0 auto;}.time-item strong {background: orange;color: #fff;line-height: 100px;font-size: 40px;font-family: Arial;padding: 0 10px;margin-right: 10px…

【hive】远程remote debug hive的方法,用于hive监听器/钩子编写

背景 写hive监听器时候需要拿到hive对象但hive是在集群linux主机上运行的。通过jdbc提交的sql具体执行过程不会再idea中运行。所以如果需要拿到hive对象有可能存在两个思路&#xff1a; &#xff08;1&#xff09;想办法写个钩子或者监听器&#xff0c;将需要的内容写成json字…

最简单的ubuntu安装docker教程

本文参考自docker官方教程&#xff1a;ubuntu上安装docker 一、安装Docker 第一步&#xff1a;添加Docker官方的GPG密钥 直接复制所有代码&#xff0c;作为一行运行即可 sudo apt-get update sudo apt-get install ca-certificates curl sudo install -m 0755 -d /etc/apt/k…

Python学习从0开始——项目一day01爬虫(二)

Python学习从0开始——项目一day01爬虫&#xff08;二&#xff09; 一、解析response数据二、json转换三、文件保存四、存储json对象五、完整代码 上一篇 一、解析response数据 在已经知道我们获取图片的最终URL存在于请求响应response中&#xff0c;下一步的重点就放在解析re…

Python格式化输出的三种常用方式

1.使用%做格式化&#xff0c;不推荐 str1"%d年%d月%d日 %s出生"%{year,month,day,name} print(str1)2.使用f’{变量}做格式化 str2f"{year}年{month}月{day}日{name}出生" print(str2) #如果要输出的字符串有{}&#xff0c;如 book"相对论" st…

latex中图片或者表格过大 导致页面里有大片空白

针对这个问题&#xff0c;可以通过把表格与上下文的距离调小&#xff0c;表格与标题的距离调小。 \vspace{-0.8cm} %调整图片/表格与上下文的垂直距离 -注意&#xff1a;该语句&#xff0c;要在begin{figure}和end{figure}上面和前面使用&#xff08;可以分别使用&#xff09;…

Redis-底层数据结构

Redis-底层数据结构 redisObject对象机制对象共享引用计数以及对象的消毁 动态字符串SDS链表链表的优缺点: 压缩链表ziplist的缺点 字典-Dictrehash渐进式rehash 整数集-intSet内存分布图整数集合的升级 跳表 - ZSkipList快表-quicklistlistpack redisObject对象机制 typedef s…

DP10RF001一款200MHz~960MHz 低功耗(G)FSK/OOK无线收发芯片应用无线遥控工控设备无线门禁传感器等

产品概述 DP10RF001是一款工作于200MHz~960MHz范围内的低功耗、高性能、单片集成的(G)FSK/OOK无线收发机芯片。内部集成完整的射频接收机、射频发射机、频率综合器、调制解调器&#xff0c;只需配备简单、低成本的外围器件就可以获得良好的收发性能。芯片支持灵活可设的数据包…

Jmeter从数据为查找结果集数据方法随笔

一、Jmeter连接数据库 1.下载对应数据库的驱动包到jmeter安装目录的lib下ext文件中&#xff0c;并导入到jmeter的测试计划中&#xff0c;本实例中使用的是mysql如下所示&#xff1a; 点击测试计划–>点击浏览–>选中mysql驱动jar包–>打开 2.添加线程组&#xff0c;…

vue使用后端提供的接口

在 Vue 中使用后端接口 在 Vue.js 应用中使用后端提供的接口可以让你与服务器通信&#xff0c;获取和更新数据。本文将介绍如何在 Vue 中使用后端接口。 1. 安装 Axios 首先&#xff0c;你需要安装 Axios 库&#xff0c;这是一个用于发起 HTTP 请求的 JavaScript 库。在终端…

毕设(三)——nb-lot与onenet通信

文章目录 一、前言二、nb-lot与onenet的连接2.1 创建产品2.2 创建设备2.3 连接2.4 发送数据 三、onenet的数据可视化 刚刚看了一个关于nb-lot的视频&#xff0c;我看到up是用onenet原生的GUI就能做到数据的显示&#xff0c;十分亮眼 主要是它能把地图也一起显示出来&#xff0c…

2024mathorcup数学建模思路教学

大家好呀&#xff0c;认证杯数学建模开始了&#xff0c;来说一下选题建议以及思路吧&#xff1a; 首先定下主基调&#xff0c; 本次mathorcup数学应用挑战赛推荐大家选择C题&#xff0c;难度方面&#xff1a;A≈B&#xff1e;D&#xff1e;C。 我们预计4.13日晚上前更新完毕…