lxml 和 XPah (爬虫)
lxml 和 XPah (爬虫)
- XPath 的基本语法规则
- 获取内容
- 集合的概念
- 属性匹配与获取
- 按序选择节点
XPath 的基本语法规则
XPath 语法规则 | 描述 |
---|---|
nodename | 选取此节点的作用子节点 |
/ | 从当前节点选取直接子节点 |
// | 从当前节点选取子孙节点 |
. | 选取当前节点 |
… | 选取当前节点的父节点 |
@ | 选取属性 |
注意:
通过X Path定位节点返回的是节点集合,即使只有一个节点,返回的也是一个节点集合。
使用XPath分析的HTML文档并不一定是标准的,可以没有像 <html>、<head>、<body> 这些节点。任何一段符合HTML语法标准的代码都可以使用XPah进行定位。
获取内容
- 通过getroot方法获得根节点
- 通过get方法获得节点属性值,
- 通过text方法属性获取节点内容,通过索引的方式引用子节点。
如有一个下面的HTML
html = '''
<div>
<ul>
<li class="item1"><a href ="http:1">1</a><p>11</p></li>
<li class="item2"><a href ="http:2">2</a></li>
<li class="item3"><a href ="http:3">3</a></li>
</ul>
</div>
集合的概念
下面代码:
from lxml import etree
# 分析HTML代码
tree = etree.HTML(html)
# 使用 xpath 定位
aTags = tree.xpath("//li")
print(aTags[0][0].text) # 对应<a>
print(aTags[0][1].text) # 对应<p>
print(aTags[1][0].text)
# 输出
1
11
2
.分析
//
:由上面的语法规则,这个当前节点指的是html这个整体,即文档节点。所以这样可以的到<div>、<ul>、<li>
在内的节点li
:是语法规则第一条,就是选取所有节点名为li
- 之后返回是一个集合,因为在该案列中有三个,所以可以想象成是一个二维集合。其中在
li
中的每一个标签一同构成了一个二维数组
属性匹配与获取
比较常用的匹配就是根据属性值来选取节点。引用属性值需要在属性名前面加@,如@class表示class属性。
XPath 的过滤条件需要放到一对中括号([…])中,如'//a[@class="item1"]'
表示过滤所以class属性值为item1的<a>
节点。如果不放在括号里,如‘//a/@href'
表示获取<a>
节点的href属性值。
如上面的例子我们要获取第二个li 可以这样写:
aTags = tree.xpath("//li[@class='item2']")
按序选择节点
在很多时候,在选中某些节点时,按一些属性进行匹配,可能同时有多个节点满足条件,而只想得到其中的一个或几个节点。
这时就要使用索引的方式获取特定的节点。在X Path中使用索引的方式与 Python 中引用列表中元素的方式类似,都是在中括号中使用索引,
如上面的例子我们要获取第二个li 也可以这样写:
aTags = tree.xpath("//li[2]")
注意:在这里下标是从1开始的。
lxml 和 XPah (爬虫)相关推荐
- Python常用插件类举,lxml+Xpath实现爬虫,使用Xpath爬取链家二手房源信息
目录 一.XPath 二.XPath 常用规则 三.在谷歌浏览器安装XPath插件 四.Python爬虫常用插件 五.使用Xpath解析 六.Xpath匹配示例 1.查看所有的标签(如p.a.li标签 ...
- 爬虫之 lxml模块的安装与使用示例
爬虫之 lxml模块的安装与使用示例 lxml模块是一个第三方模块,安装之后使用 1.1 lxml模块的安装 对发送请求获取的xml或html形式的响应内容进行提取 pip/pip3 install ...
- 网页爬虫 python-Python爬虫解析网页的4种方式
文章目录 爬虫的价值 正则表达式 requests-html BeautifulSoup lxml的XPath 爬虫的价值 常见的数据获取方式就三种:自有数据.购买数据.爬取数据.用Python写爬虫 ...
- python爬虫详细步骤-Python爬虫的两套解析方法和四种爬虫实现过程
对于大多数朋友而言,爬虫绝对是学习 python 的最好的起手和入门方式.因为爬虫思维模式固定,编程模式也相对简单,一般在细节处理上积累一些经验都可以成功入门.本文想针对某一网页对 python 基础 ...
- python爬虫工程师-Python-爬虫工程师-面试总结
对if __name__ == 'main'的理解陈述 __name__是当前模块名,当模块被直接运行时模块名为__main__,也就是当前的模块,当模块被导入时,模块名就不是__main__,即代码 ...
- 【Python基础】Python爬虫的两套解析方法和四种信息提取方式
Python爬虫 Author:Iouwill Machine Learning Lab 分享一篇往日旧文章,非常实用. 对于大多数朋友而言,爬虫绝对是学习python的最好的起手和入门方式.因为爬虫 ...
- 爬虫的步骤解析内容xpath介绍_爬虫入门到精通-网页的解析(xpath)
在爬虫入门到精通第五讲中,我们了解了如何用正则表达式去抓取我们想要的内容.这一章我们来学习如何更加简单的来获取我们想要的内容. xpath的解释 XPath即为XML路径语言(XML Path Lan ...
- Python3 爬虫学习笔记 C09【数据储存系列 — 文件储存】
Python3 爬虫学习笔记第九章 -- [数据储存系列 - 文件储存] 文章目录 [9.1]TXT 文本存储 [9.1.1]基本示例 [9.1.2]打开方式 [9.2]JSON 文件存储 [9.2. ...
- python爬虫分析_Python爬虫解析网页的4种方式
文章目录 爬虫的价值 正则表达式 requests-html BeautifulSoup lxml的XPath 爬虫的价值 常见的数据获取方式就三种:自有数据.购买数据.爬取数据.用Python写爬虫 ...
最新文章
- WTL中CMemDC与CDC、CDCHandle的联系
- 利用74LS161计数器芯片分别实现模12,模20的计数器,并在QuartusⅡ上进行仿真
- java 反射 参数名_JAVA 8 反射获取参数名
- 在听伏尔加纤夫曲 超酷
- C#LeetCode刷题之#374-猜数字大小(Guess Number Higher or Lower)
- 启动报错 classnofoundexception org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
- mxnet 训练--如何生成rec 数据 +自己在本机测试的结果
- jbod ugood 磁盘驱动状态_LSI Storcli 工具使用
- gcc -fomit-frame-pointer选项,-fno-dwarf2-cfi-asm 选项
- android获取角速度,android dyrscope sensor 角速度传感器调试
- 大牛程序员带你走进互联网:资历深不是优势,资源才是难得的宝藏!
- scanf ---------未完待续
- 【C语言】三子棋(智能下棋 + 阻拦玩家)
- Oracle安装与配置(Linux)
- 杀疯了!本科大神毕设:3D虚拟主播软件!独创AR直播!支持OBS!开源!
- 如何写 [文献综述]
- 深度强化学习泡沫及路在何方?
- 在Windows中开启Wifi热点共享,无需第三方工具
- java用scanner循环输入_Scanner怎么实现连续输入
- windows下搭建NFS服务器
热门文章
- html5实现贪吃蛇,分享一个用html5实现的贪吃蛇特效代码
- 元素与核素有什么区别?
- pytorch torch.from_numpy()(从numpy数组创建一个张量,数组和张量共享相同内存)
- python PyQt5中文教程☞【第八节】PyQt5控件(II)
- 字典、列表、元祖、字符串的综合(1)
- springboot整合redis集群master宕机后连接超时
- linux mysql 5.5 安装_Linux 安装 mysql5.5.19
- Idea新建项目默认是JDK1.5解决办法
- 开发html5的共享单车,HTML5 SVG 共享单车(小蓝车)动画
- 超级计算机 红皇后,阿丽塔诺瓦不是最大反派 幕后大boss超级计算机黑化AI