Python爬虫 简单介绍一下Xpath及使用


Posted in Python onApril 26, 2022

前言

网上已经有很多大佬发过Xpath,而且讲的都很好,我是因为刚开始学习网络爬虫,对这些基础重要知识不太了解,所以写一下来加深印象,本篇文章只是简单介绍一下Xpath及使用,总体来说比较基础。

一、Xpath简介

XPath(XML Path Language - XML路径语言),它是一种用来确定XML文档中某部分位置的语言。

Xpath以XML为基础,提供用户在数据结构树中寻找节点的能力,Xpath被很多开发者亲切的称为小型查询语言。

二、Xpath语法规则

xpath可以使用路径表达式在XML上选取节点,从而达到确认元素的目的,我们先来介绍以下语法规则。

语法规则

表达式 作用
nodename 选取此层级节点下的所有子节点
/ 代表从根节点进行选取
// 可以理解为匹配,就是在所有节点中选取此节点,直到匹配为止
. 选取当前节点
选取当前节点上一层(上一级目录)
@ 选取属性(也是匹配)

标签定位

方式 效果
/html/body/div 表示从根节点开始寻找,标签与标签之间/表示一个层级
/html//div 表示多个层级 作用于两个标签之间(也可以理解为在html下进行匹配寻找标签div)
//div 从任意节点开始寻找,也就是查找所有的div标签
./div 表示从当前的标签开始寻找div

属性定位

需求 格式
定位div中属性名为href,属性值为‘www.baidu.com’的div标签 @属性名=属性值
href为属性名 'www.baidu.com’为属性值 /html/body/div[href=‘www.baidu.com’]

索引定位

需求 格式
定位ul下第二个li标签(下图) //ul/li[2]
索引值开始位置为 1

取文本内容

方法 效果
/text() 获取标签下直系的标签内容
//text() 获取标签中所有的文本内容
string() 获取标签中所有的文本内容

在网页上获取Xpath其实很容易,直接找到标签后,右键复制就好了。

Python爬虫 简单介绍一下Xpath及使用

三、语法规则练习

接下来我们开始练习一下本地导入,加深一下理解,这个是一个比较简单的网页结构,我们先学会用法即可。

Python爬虫 简单介绍一下Xpath及使用

任务要求: 可以达到随心所欲的定位每一个元素

准备工作

#导入所需要的包
from lxml import etree
#采用本地源码获取方式并加载到etree内
tree = etree.parse('test.html')

1.获取百度、谷歌、搜狗文本内容

#引用xpath方法并进行标签定位
#''.join是取字符串内的内容
text = ' '.join(tree.xpath('/html/body/ul/li/a/text()'))
print(text)

Python爬虫 简单介绍一下Xpath及使用

2.获取单个谷歌

text1 = tree.xpath("//ul/li[2]/a/text()")[0]
print(text1)

Python爬虫 简单介绍一下Xpath及使用

3.获取北京、上海、天津的属性值

text2 = ' '.join(tree.xpath("//ol/li/a/@href"))
print(text2)

Python爬虫 简单介绍一下Xpath及使用

4.获取河南文本

#获取河南文本
text3 = tree.xpath("/html/body/div[2]/text()")[0]
print(text3)

Python爬虫 简单介绍一下Xpath及使用

5.获取谷歌属性值

text4 = tree.xpath("//ul/li[2]/a/@href")[0]
print(text4)

Python爬虫 简单介绍一下Xpath及使用

至此我们已经可以随心定位任意标签 完成任务 收工

总结

到此这篇关于Python爬虫必备之Xpath简介及实例的文章就介绍到这了!


Tags in this post...

Python 相关文章推荐
Python中字典的基本知识初步介绍
May 21 Python
Python正则简单实例分析
Mar 21 Python
Python进阶学习之特殊方法实例详析
Dec 01 Python
十分钟利用Python制作属于你自己的个性logo
May 07 Python
python实现可视化动态CPU性能监控
Jun 21 Python
python使用正则表达式来获取文件名的前缀方法
Oct 21 Python
Python3之不使用第三方变量,实现交换两个变量的值
Jun 26 Python
Python序列对象与String类型内置方法详解
Oct 22 Python
Python-opencv 双线性插值实例
Jan 17 Python
python_matplotlib改变横坐标和纵坐标上的刻度(ticks)方式
May 16 Python
基于Python实现体育彩票选号器功能代码实例
Sep 16 Python
Python操作dict时避免出现KeyError的几种解决方法
Sep 20 Python
分享python函数常见关键字
Apr 26 #Python
python和Appium的移动端多设备自动化测试框架
Apr 26 #Python
Python查找算法的实现 (线性、二分,分块、插值查找算法)
Python 装饰器(decorator)常用的创建方式及解析
Apr 24 #Python
解决IDEA翻译插件Translation报错更新TTK失败不能使用
python使用BeautifulSoup 解析HTML
Apr 24 #Python
Python中npy和mat文件的保存与读取
Apr 24 #Python
You might like
PHP获取当前页面URL函数实例
2014/10/22 PHP
php生成gif动画的方法
2015/11/05 PHP
php封装的图片(缩略图)处理类完整实例
2016/10/19 PHP
使用laravel指定日志文件记录任意日志
2019/10/17 PHP
PHP使用递归按层级查找数据的方法
2019/11/10 PHP
在IE6下发生Internet Explorer cannot open the Internet site错误
2010/06/21 Javascript
关于js获取radio和select的属性并控制的代码
2011/05/12 Javascript
JavaScript中“过于”犀利地for/in循环使用示例
2013/10/22 Javascript
千分位数字格式化(用逗号隔开 代码已做了修改 支持0-9位逗号隔开)的JS代码
2013/12/05 Javascript
JavaScript之Object类型介绍
2015/04/01 Javascript
javascript实现随机读取数组的方法
2015/08/03 Javascript
js识别uc浏览器的代码
2015/11/06 Javascript
JS结合bootstrap实现基本的增删改查功能
2016/07/22 Javascript
JavaScipt选取文档元素的方法(推荐)
2016/08/05 Javascript
underscore之Chaining_动力节点Java学院整理
2017/07/10 Javascript
vue 自定义 select内置组件
2018/04/10 Javascript
jQuery实现获取选中复选框的值实例详解
2018/06/28 jQuery
js自定义input文件上传样式
2018/10/26 Javascript
在vue中阻止浏览器后退的实例
2019/11/06 Javascript
Nuxt的路由配置和参数传递方式
2020/11/06 Javascript
[02:16]深扒TI7聊天轮盘语音出处2
2017/05/11 DOTA
python实现网站的模拟登录
2016/01/04 Python
Python 搭建Web站点之Web服务器与Web框架
2016/11/06 Python
在Python 2.7即将停止支持时,我们为你带来了一份python 3.x迁移指南
2018/01/30 Python
关于Python3 类方法、静态方法新解
2019/08/30 Python
Python通过Tesseract库实现文字识别
2020/03/05 Python
敬老院院长事迹材料
2014/05/21 职场文书
2014年班主任德育工作总结
2014/12/05 职场文书
给客户的检讨书
2014/12/21 职场文书
大学军训决心书
2015/02/05 职场文书
工程质检员岗位职责
2015/04/08 职场文书
亮剑观后感
2015/06/05 职场文书
小学数学教学随笔
2015/08/14 职场文书
新学期开学寄语2016
2015/12/04 职场文书
uniapp开发小程序的经验总结
2021/04/08 Javascript
HTML实现仿Windows桌面主题特效的实现
2022/06/28 HTML / CSS