python爬虫系列5--xpath

2023-11-02

教程地址:http://www.runoob.com/xpath/xpath-tutorial.html

XPath在python的爬虫学习中,起着举足轻重的地位,对比正则表达式re两者可以完成同样的工作,实现的功能也差不多,但XPath明显比re具有优势,在网页分析上使re退居二线。

xpath全称为XML Path Language 一种小型的查询语言,所具备的优点:

1) 可在XML中查找信息

2) 支持HTML的查找

3) 通过元素和属性进行导航

XPath属于lxml库模块,所以首先要安装库lxml。

简单示例:

from lxml import etree

selector=etree.HTML(源码) #将源码转化为能被XPath匹配的格式

selector.xpath(表达式) #返回为一列表

+ xpath与bs4比较

(1)bs4是用python写的第三方库,XPath是一门语言,lxml是用c写的,速度块;

(2)xpath要求一定清楚文档层次结构,它通过元素和属性进行导航,可以使用绝对路径或相对路径查找,而bs4不必清楚文档结构,可以直接找某些标签,简单粗暴。


+ 路径表达式

nodename 选取此节点的所有子节点。

/ 从根节点选取。

// 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。

. 选取当前节点。

.. 选取当前节点的父节点。

@ 选取属性。

/text() 获取当前路径下的文本内容

starts-with 解决标签属性值以相同字符串开头的情况


+ 谓语

谓语用来查找某个特定的节点或者包含某个指定的值的节点。谓语被嵌在方括号中。


+ 通配符

* 匹配任何元素节点。

@* 匹配任何属性节点。

node() 匹配任何类型的节点。

| 选取若干路径


+ 轴

轴可定义相对于当前节点的节点集。

ancestor 选取当前节点的所有先辈(父、祖父等)。

ancestor-or-self 选取当前节点的所有先辈(父、祖父等)以及当前节点本身。

attribute 选取当前节点的所有属性。

child 选取当前节点的所有子元素。

descendant 选取当前节点的所有后代元素(子、孙等)。

descendant-or-self 选取当前节点的所有后代元素(子、孙等)以及当前节点本身。

following 选取文档中当前节点的结束标签之后的所有节点。

following-sibling 选取当前节点之后的所有兄弟节点

namespace 选取当前节点的所有命名空间节点。

parent 选取当前节点的父节点。

preceding 选取文档中当前节点的开始标签之前的所有节点。

preceding-sibling 选取当前节点之前的所有同级节点。

self 选取当前节点。


+ 运算符

算术运算符、关系运算符、逻辑运算符

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python爬虫系列5--xpath 的相关文章

  • 将 ical 附件的邮件消息的内容类型设置为“text/calendar; method=REQUEST”

    我正在尝试使用 App Engine 邮件 API 从 App Engine 发送 iCalendar 格式的 ics 文件 这在 GMail 中非常有效 但是 Outlook 无法识别该文件 我认为问题在于内容类型设置为 文本 日历 而不
  • celery任务eta已关闭,使用rabbitmq

    我使用教程中的默认设置和在 ubuntu 上运行的rabbitmq 使 Celery 任务正常进行 当我毫不延迟地安排任务时 一切都很好 但是当我给他们一个预计时间时 他们会被安排在未来 就好像我的时钟在某个地方关闭了一样 下面是一些请求任
  • 函数名称未定义

    我有一段代码 看起来像这样 if name main main def main print hello 但是 当我尝试运行此代码时 出现错误 NameError 名称 main 未定义 我是否没有在函数 def main 的第一行定义名称
  • 使用ideone时如何传入命令行参数?

    我正在使用 ideone 在线解释器 http ideone com http ideone com 来测试一些 C 和 Python 程序 如何指定命令行参数而不是使用 STDIN 输入 看起来你不能 但是快速破解应该做的伎俩 stati
  • 在多核上运行 python 线程

    我知道Python 2 7不允许在不同的内核上运行多个线程 你需要使用multiprocessing模块以实现某种程度的并发性 我正在看concurrent futuresPython 3 4 中的模块 是否使用ThreadPoolExec
  • 为什么我会收到 ValueError:系列的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()

    以下代码给出了值错误 major males for row in recent grads if recent grads Men gt recent grads Women major males append recent grads
  • lmfit模型拟合然后预测

    我正在领养lmfit进行曲线拟合并使用拟合模型进行预测 然而下面的代码并没有达到我想要的效果 能否请你帮忙 谢谢 import numpy as np from lmfit import Model def linearModel x a0
  • Asyncio:从未检索到任务异常的怪异

    假设我有一个简单的代码 import asyncio async def exc print 1 0 loop asyncio get event loop loop create task exc try loop run forever
  • matplotlib:渲染到缓冲区/访问像素数据

    我想使用 matplotlib 生成的图作为 OpenGL 中的纹理 到目前为止 我遇到的 matplotlib 的 OpenGL 后端要么不成熟 要么已经停止使用 所以我想避免使用它们 我当前的方法是将图形保存到临时 png 文件中 并从
  • ImproperlyConfigured at / 不允许空静态前缀 - Django

    我正在使用 Django 上传 显示图像 该网站部署在 Heroku 上 下列的this https coderwall com p bz0sng教程我能够成功上传图像 但是 图像并未显示在模板中 然后我了解到我的 urls py 末尾应该
  • 机器学习的周期性数据(例如度角 -> 179 与 -179 相差 2)

    我使用 Python 进行核密度估计 并使用高斯混合模型对多维数据样本的可能性进行排名 每一条数据都是一个角度 我不确定如何处理机器学习的角度数据的周期性 首先 我通过添加 360 来删除所有负角 因此所有负角都变成了正角 179 变成了
  • 使用具有可变数量索引的 numpy mggrid

    如何将 numpy mgrid 与可变数量的索引一起使用 我在 github 上找不到任何人将其与硬编码值以外的任何内容一起使用的示例 import numpy as np np mgrid 1 10 1 10 this works fin
  • Python GTK3 Treeview 向上或向下移动选择

    如何在树视图中向上或向下移动所选内容 我的想法是 我可以使用向上和向下按钮将选择向上移动一行或向下移动一行 我的 Treeview 使用 ListStore 不确定这是否重要 首先 我将使用我熟悉的 C 代码 如果您在将其翻译为 Pytho
  • 如何将 django ModelForm 字段显示为不可编辑

    接受我的初步教训django ModelForm 我想让用户能够编辑博客中的条目 BlogEntry has a date postedTime title and content 我想向用户展示一个编辑表单 其中显示所有这些字段 但仅包含
  • 如何在类型提示中定义元组或列表的大小

    有没有办法在参数的类型提示中定义元组或列表的大小 目前我正在使用这样的东西 from typing import List Optional Tuple def function name self list1 List Class1 if
  • 尝试 numba 时出现巨大错误

    我在使用 numba 时遇到了大量错误 讽刺的是 正确的结果是在错误之后打印的 我正在使用最新的 Anaconda python 并安装了 numba conda install numba 一次在 Ubuntu 13 64 位和 anac
  • 如何创建简单的梯度下降算法

    我正在研究简单的机器学习算法 从简单的梯度下降开始 但在尝试用 python 实现它时遇到了一些麻烦 这是我试图重现的示例 我获得了有关房屋的数据 居住面积 以英尺为单位 和卧室数量 以及最终的价格 居住面积 英尺2 2104 卧室 3 价
  • 将函数按元素应用于两个 DataFrame

    如何应用函数z ij f x ij y ij 来自数据框X and Y相同大小并将结果保存到 DataFrameZ 这取决于你有什么样的功能 很多功能已经被矢量化为数据框 例如 等等 所以对于这些功能 你可以简单地做Z X Y or Z X
  • 将二进制数转换为包含每个二进制数的数组

    我试图将二进制值转换为每个 1 0 的列表 但我得到默认的二进制值而不是列表 我有一个字符串 我将每个字符转换为二进制 它给了我一个列表 其中每个字符都有一个字符串 现在我试图将每个字符串拆分为值为 0 1 的整数 但我什么也得不到 if
  • 如何在不同的目录中执行python脚本?

    Solved对于可能觉得这有帮助的人 请参阅下面我的答案 我有两个脚本 a py 和 b py 在我当前的目录 C Users MyName Desktop MAIN 中 我运行 gt python a py 第一个脚本 a py 在我当前

随机推荐

  • 复旦nlp实验室 nlp-beginner 任务一:基于机器学习的文本分类

    实现基于logistic softmax regression的文本分类 参考 文本分类 神经网络与深度学习 第2 3章 数据集 Classify the sentiment of sentences from the Rotten Tom
  • 【蓝桥杯Python】基础练习17:矩阵乘法

    试题 基础练习 矩阵乘法 目录 题目 资源限制 问题描述 输入格式 输出格式 样例输入 样例输出 解答 Python源代码 题目 资源限制 时间限制 1 0s 内存限制 512 0MB 问题描述 给定一个N阶矩阵A 输出A的M次幂 M是非负
  • 多因素方差分析_多因素方差分析(1)

    之前介绍的方差分析 称之为是单因素方差分析 one way ANOVA 主要研究单个因素对因变量的影响 多因素方差分析 是研究多个 2个或2个以上 自变量对因变量的影响 可以直观表现为以下公式 单因素方差分析 Yi a b Xi e 多因素
  • c语言变参宏和利用变参宏的一些简单的打印实现

    一些函数 如printf 接受数量可变的参数 stdvar h头文件提供了工具 让用户自定义带可变参数的函数 通过把宏参数列表中最后的参数写成省略号 即3个点 来实现这一功能 这样 预定义宏 VA ARGS 可用在替换部分中 表明省略号代表
  • Java的运算符及开发环境的安装

    一 运算符 1 赋值运算符 变量名 表达式 符合赋值运算符 2 算术运算符 整除 求余 在后 先用再加 在前 先加再用 3 关系运算符 如 gt lt gt lt char类型是可以比较 因为char类型存储的是对应的ASCII 判断一个字
  • 哪些循环依赖问题Spring解决不了?

    前言 大家都知道 Spring 解决了循环依赖的问题 网上也可以搜到 Spring 是使用三级缓存来解决循环依赖的 但有些时候循环依赖问题还是会导致启动报错 也就说明 在某些情况下 Spring 是没有办法解决循环依赖问题的 我们就来探究一
  • JIRA工作流节点状态变化前弹出窗口填写日志或者备注

    一 定义弹出框的页面 1 进入问题管理页面 并点添加屏幕 2 自定义弹出页面的名称 3 点击添加后会进入配置页面 配置页面所包含的字段 二 在工作流中配置页面 1 进入工作流编辑页面双击需要添加弹出页面的流程 2 在弹出框中页面栏选择刚刚配
  • Python爬虫必备:浏览器开发者工具的使用,非常详细

    最近很多小伙伴说 不会用浏览器开发者工具 今天我们就一起来深入了解一下开发者工具 以谷歌浏览器为例 谷歌浏览器开发者工具中的Network 是我们学习经常用到的 那么你都知道他们每个功能的意义吗 因本人经常有360极速浏览器 谷歌内核 所以
  • vue pdf.js统计pdf的页数

    参考链接作者原文展示了PDF 我只需要一部分功能
  • Adobe进军AI第一步——Firefly试用体验

    在关于人工智能讨论度高居不下的今天 各个行业的领路企业也纷纷不甘落后 Adobe作为媒体界的行业标杆 就在近期推出了自己的人工智能图像应用 萤火虫firefly 虽然这只萤火虫刚刚 起飞 它已经展现的文字生图和能力算是及格 我分别在网页版和
  • spark-submit 碰到 Spark-submit:System memory 466092032 must be at least 471859200

    在利用spark进行分布式计算时 home hadoop spark spark 2 4 0 bin hadoop2 7 bin spark submit master yarn ALS py 以上代码是在centos7 利用spark集群
  • vim 一段代码整体移动

    方法1 可以用ctrl v 然后上下移动光标 再shift i进入编辑模式 然后按删除或者空格或者tab键来移动第一行 然后按ESC 就能整段代码动起来了 方法2 1 点击 esc 键进入命令模式 使用 set nu 显示行号 2 点击 e
  • 又是第一!GBASE南大通用蝉联中国分析型数据库管理系统市场TOP1

    报告指出 大数据时代 用户对数据分析的需求不断提升 希望从大量数据中获得新的数据价值 数据分析需求不断上升 分析型数据库市场保持稳定增长 GBASE南大通用作为分析型数据库市场的代表企业 位居本土厂商第一名 在分析型数据库市场 GBASE自
  • 插件分享

    前言 要问我Goby怎么样 我会坚定回答你 最强实时网络空间测绘 没有之一 初次发现Goby还是来自于同事 hq404的推荐 看完第一反应 真漂亮 我馋了 我要xxxxxx 其Logo和UI做的相当棒 当然不仅拥有华丽的外表 更让我深爱又离
  • python爬取新发地菜价

    import requests from bs4 import BeautifulSoup import csv url http www xinfadi com cn marketanalysis 0 list 1 shtml respo
  • 【机试练习】【C++】【PAT A1053】Path of Equal Weight(玄学一样的“段错误”)

    此题有较大的玄学 如果将cmp函数的默认返回值更改为true 则会出现最后一个测试用例的 段错误 在代码中以 我的天 玄学 标识出 include
  • Java阻塞队列

    目录 一 阻塞队列的特点 二 生产者 消费者 存在问题 三 阻塞队列 Java实现 属性 方法 put方法 生产者 线程专门调用的方法 get方法 消费者 线程专门调用的方法 执行顺序分析 图解 在我们上图的代码当中 如果把while改成i
  • Sharding-JDBC(八)5.3 系列升级解读

    目录 一 背景 二 影响范围 1 Maven 坐标调整 2 自定义算法调整 3 事务调整 4 配置文件调整 三 升级指导 1 新的 ShardingSphereDriver 数据库驱动 2 正在使用 Spring Boot Starter
  • 2023华为OD机试真题【找朋友/单调栈】

    题目描述 在学校中 N个小朋友站成一队 第i个小朋友的身高为height i 第i个小朋友可以看到的第一个比自己身高更高的小朋友j 那么j是i的好朋友 要求j gt i 请重新生成一个列表 对应位置的输出是每个小朋友的好朋友位置 如果没有看
  • python爬虫系列5--xpath

    教程地址 http www runoob com xpath xpath tutorial html XPath在python的爬虫学习中 起着举足轻重的地位 对比正则表达式re两者可以完成同样的工作 实现的功能也差不多 但XPath明显比