当前位置: 首页 > web >正文

Python网络爬虫之Xpath详解

1、什么是Xpath

XPath 是一门在 XML 文档中查找信息的语言。

所谓 Xpath,是指 XML path language,path 就是路径, Xpath 主要是通过路径来查找元素。

咱们先看一个HTML结构

<html lang="en"><head><meta charset="UTF-8"/><title>Xpath</title></head><body id="body"><div id="div1"><form id="form"><ul id="ul"><li id="li1"></li><li id="li2"></li><li id="li3"></li><li id="li4"></li></ul><select id="select"><option></option><option></option><option></option><option></option></select></form></div><div id="div2"><form id="form2"><ul id="ul2"><li></li><li></li><li></li><li></li></ul><select id="select2"><option></option><option></option><option></option><option></option></select></form></div></body>
</html>

 HTML 的结构就是树形结构,HTML 是根节点,所有的其他元素节点都是从根节点发出的。其他的元素都是这棵树上的节点Node,每个节点还可能有属性和文本。
而路径就是指某个节点到另一个节点的路线。

 Xpath的路径分为相对路径和绝对路径

  • 相对路径:相对路径是从任意节点开始到目标路径结束
  • 绝对路径:是从 HTML 根节点开始算

2、基本语法

表达式描述示例
/从根节点开始选取/html/body
//从任意节点开始选取,不考虑层级关系//div
.选取当前节点
..选取当前节点的父节点//select/..  选择select节点的所有父节点
@选取属性,或者根据属性选取//select[@id='select'] 选择id=select的节点
*通配符,表示任意节点或任意属性

3、Xpath速查表

通过jquery语法和xpath语法比对实现速查

3.1、后代选择器

jquery语法        xpath语法
$("h1")//h1
$("div p")//div//p
$("ul > li")//ul/li
$("ul > li > a")//ul/li/a
$("div > *")//div/*
$(":root")/
$(":root > body")/body

3.2、属性选择器

jquery语法xpath语法
$("#id")//*[@id="id"]
$(".class")//*[@class="class"]
$("input[type="submit"]")//input[@type="submit"]
$("a#abc[for="xyz"]")//a[@id="abc"][@for="xyz"]
$("a[rel]")/a[@rel]
$("a[href^='/']")//a[starts-with(@href, '/')]
$("a[href$='pdf']")//a[ends-with(@href, '.pdf')]
$("a[href*='://']")//a[contains(@href, '://')]
$("a[rel~='help']")//a[contains(@rel, 'help')]

3.3、顺序选择器

jquery语法xpath语法
$("ul > li:first-of-type")//ul/li[1]
$("ul > li:nth-of-type(2)")//ul/li[2]
$("ul > li:last-of-type")//ul/li[last()]
$("li#id:first-of-type")//li[1][@id="id"]
$("a:first-child")//*[1][name()="a"]
$("a:last-child")//*[last()][name()="a"]

3.4、同级选择

jquery语法xpath语法
$("h1 ~ ul")//h1/following-sibling::ul
$("h1 + ul")//h1/following-sibling::ul[1]
$("h1 ~ #id")//h1/following-sibling::[@id="id"]

3.5、其他

jquery语法/描述xpath语法
$("h1:not([id])")//h1[not(@id)]
文本全匹配//button[text()="Submit"]
文本模糊匹配//button[contains(text(),"Go")]
算数匹配//product[@price > 2.50]
是否有子节点//ul[*]
存在子节点li//ul[li]
or 匹配//a[@name or @href]
多种结果聚合//a | //div                        
$('ul > li').parent()//ul/li/..
$('li').closest('section') //li/ancestor-or-self::section
$('a').attr('href')//a/@href
$('span').text()//span/text()

http://www.xdnf.cn/news/11658.html

相关文章:

  • Python的包安装工具——pip命令大全
  • netstat详解
  • Linux-文件查找find命令
  • Echarts热力图配置项,一篇文章告诉你。
  • 神仙级Python入门教程(非常详细),从零基础入门到精通,看这篇就够了
  • 一文详细说明spring cloud和Spring Cloud Alibaba的各自组件以及联系和区别
  • Validate表单验证插件之常用参数介绍
  • 网关 GateWay 的使用详解、路由、过滤器、跨域配置
  • 神经网络(NN)网络构建及模型算法介绍
  • 从计网的角度讲明白什么是网关
  • Apollo入门使用手册
  • Java资源大全(更新中)
  • Keil(MDK)STM32和51版本详细安装
  • GPU 性能测试软件:GPU-Z,2023 年 9 月 12 日更新
  • 【19】linux进阶——后台运行()和nohup命令
  • ESFP型人格的特征,ESFP型人格的优势和劣势分析
  • react Native 环境安装配置——图解版一目了然
  • Netty基础入门和基本使用
  • TortoiseSVN使用教程[多图超详细]
  • Numpy的用法详细总结
  • 百度程序员删库跑路被逮捕!
  • 一文看懂Mesh组网
  • Android Gradle开发与应用 (一) : Gradle基础
  • iview--使用总结
  • 抖音越狱版本App下载
  • Verilog基础语法(13)之case语句
  • Element-UI介绍:主题定制、自定义组件和插件扩展
  • OpenCV快速入门:初探
  • Fiddlerd的工作原理与配置
  • JDK安装太麻烦?一篇文章搞定