PYTHON XPath与lxml类库
XPath,我们可以用先将HTML文档转换成XML文档,然后用XPath查找HTML节点或元素。
XML文档实例
HTML DOM模型示例
HTML DOM定义了访问和操作HTML文档的标准方法,以树结构方式表达了HTML文档。
XML的节点关系
1.父(Parent)
每个元素以及属性都有一个父。
下面是一个简单的XML例子中,book元素时title、author、year以及price
4.先辈(Ancestor)
某节点的父、父的父,等等。
在下面的例子中,title元素的先辈是book元素和bookstore元素:小编推荐大家加一下这个群:103456743这个群里好几千人了!大家遇到啥问题都会在里面交流!而且免费分享零基础入门料资料web开发 爬虫资料一整套!是个非常好的学习交流地方!也有程序员大神给大家热心解答各种问题!很快满员了。欲进从速哦!各种PDF等你来下载!全部都是免费的哦!只为帮助大家快速入门,所以小编在群里等你们过来一起交流学习呢!
XPath 开发工具
开源的XPath表达式编辑工具:XML Quire(XML格式文件可用)
Chrome插件Xpath Helper
Firefox插件Xpath Checker
选取节点
XPath使用路径表达式来选取XML文档中的节点或者节点集。这些路径表达式和我们常规的电脑文件系统中看到的表达式非常相似。
下面列出了最常用的路径表达式:
| 表达式 | 描述 |
|---|---|
| nodename | 选取此节点的所有子节点 |
| / | 从根节点选取 |
| // | 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。 |
| . | 选取当前节点。 |
| .. | 选取当前节点的父节点 |
| @ | 选取属性 |
在下面的表格中,我们已列出了一些路径表达式以及表达式的结果:
| 路径表达式 | 描述 |
|---|---|
| bookstore | 选取bookstore元素的所有子节点。 |
| /bookstore | 选取根元素 bookstore。注释:假如路径起始于正斜杠( / ),则此路径始终代表到某元素的绝对路径! |
| bookstore/book | 选取属于bookstore的子元素的所有book元素 |
| //book | 选取所有book子元素,而不管它们在文档中的位置 |
| bookstore//book | 选择属于bookstore元素的后代的所有bok元素,而不管它们位于bookstore之下的什么位置 |
| //@lang | 选取名为lang的所有属性。 |
谓语(Predicates)
谓语用来查找某个特定的节点或者包含某个特定的值的节点,被嵌在方括号中。
在下面的表格中,我们列出了带有谓语的一些路径表达式,以及表达式的结果:
| 路径表达式 | 结果 |
|---|---|
| /bookstore/book[1] | 选取属于bookstore子元素的第一个book元素。 |
| /bookstore/book[last()] | 选取数据bookstore子元素的最后一个book元素 |
| /bookstore/book[last()-1] | 选取属于bookstore元素的倒数第二个book元素 |
| /bookstore/book[position()<3] | 选取最前面的两个属于bookstore元素的子元素book元素 |
| //title[@lang] | 选取所有拥有名为lang的属性的title元素 |
| //title[@lang="eng"] | 选取所有title元素,且这些元素拥有值为eng的lang属性 |
| /bookstore/book[price>35.00] | 选取所有bookstore元素的book元素,且其中的price元素的值必须大于35.00 |
| /bookstore/book[price>35.00]/title | 选取bookstore元素中的book元素的所有title元素,且其中的price元素的值必须大于35.00 |
选取未知节点
XPath通配符可用来选取未知的XML元素。
| 通配符 | 描述 |
|---|---|
| * | 匹配任何元素节点 |
| @* | 匹配任何属性节点 |
| node() | 匹配任何类型的节点 |
在下面的表格中,我们列出了一些路径表达式,以及这些表达式的结果:
| 路径表达式 | 结果 |
|---|---|
| /bookstore/* | 选取bookstore元素的所有子元素 |
| //* | 选取文档中的所有元素 |
| title[@*] | 选取所有带属性的title元素 |
选取若干路径
通过在路径表达式中使用"|"运算符,您可以选取若干个路劲。
实例
在下面的表格中,我们列出了一些路径表达式,以及这些表达式的结果:
| 路径表达式 | 结果 |
|---|---|
| '//book/title | //book/price' | 选取book元素的所有title和price元素。 |
| //title | //price | 选取文档中的所有title和price元素 |
| /bookstore/book/title | //price | 选取属于bookstore元素的book元素的title元素,以及文档中的所有price元素 |
XPath的运算符
文件读取:
除了直接读取字符串,lxml还支持从文件里读取内容。我们新建一个hello.html文档:
XPath实例测试
1.获取所有的<li>标签
7.获取倒数第二个元素的内容
PYTHON XPath与lxml类库的更多相关文章
- xpath和lxml类库
1. xpath和lxml lxml是一款高性能的 Python HTML/XML 解析器,我们可以利用XPath,来快速的定位特定元素以及获取节点信息 2. 什么是xpath XPath (XML ...
- Python开发【第*篇】【Xpath与lxml类库】
什么是XML XML 指可扩展标记语言(EXtensible Markup Language) XML 是一种标记语言,很类似 HTML XML 的设计宗旨是传输数据,而非显示数据 XML 的标签需要 ...
- XPath与lxml类库
有同学说,我正则用的不好,处理HTML文档很累,有没有其他的方法? 有!那就是XPath,我们可以先将 HTML文件 转换成 XML文档,然后用 XPath 查找 HTML 节点或元素. 什么是XML ...
- 五、Xpath与lxml类库
什么是XML XML 指可扩展标记语言(EXtensible Markup Language) XML 是一种标记语言,很类似 HTML XML 的设计宗旨是传输数据,而非显示数据 XML 的标签需要 ...
- 使用python+xpath 获取https://pypi.python.org/pypi/lxml/2.3/的下载链接
使用python+xpath 获取https://pypi.python.org/pypi/lxml/2.3/的下载链接: 使用requests获取html后,分析html中的标签发现所需要的链接在& ...
- [爬虫]Windows下如何安装python第三方库lxml
lxml是个非常有用的python库,它可以灵活高效地解析xml与BeautifulSoup.requests结合,是编写爬虫的标准姿势. 但是,当lxml遇上Windows,简直是个巨坑.掉在安装陷 ...
- Windows下如何安装python第三方库lxml
lxml是个非常有用的python库,它可以灵活高效地解析xml,与BeautifulSoup.requests结合,是编写爬虫的标准姿势. 参考 Windows下如何安装python第三方库lxml ...
- 【转】 HTML解析:基于XPath的C#类库HtmlAgiliytyPack
[转] HTML解析:基于XPath的C#类库HtmlAgiliytyPack 最近处于毕业设计开始阶段,前期工作需要去国外的一些专业数据库网站比对一些所需TF家族信息,为了快捷方便,想到用程序去帮助 ...
- Python导入 from lxml import etree 导入不了
问题在学爬虫,Python 版本是2.7,安装的lxml包是4.3的,在 from lxml import etree 时发现一直报错,网上查询,原来是Python版本和lxml包版本不一致导致的. ...
随机推荐
- 洛谷——P2733 家的范围 Home on the Range
P2733 家的范围 Home on the Range 题目背景 农民约翰在一片边长是N (2 <= N <= 250)英里的正方形牧场上放牧他的奶牛.(因为一些原因,他的奶牛只在正方形 ...
- Maven插件开发教程收集(待实践)
官方教程:http://maven.apache.org/plugin-developers/index.html http://blog.csdn.net/csfreebird/article/de ...
- Windows下使用Nexus搭建Maven私服(使用)
注意: 1.从3.0版本的Nexus开始,已经不再缓存https://repo1.maven.org/maven2/的包,所以当安装好之后,在界面上不会有任何的包可以搜索到,但是功能是一切正常的,只有 ...
- 新闻:融资600万 他用一套系统优化15大HR工作场景 精简入转调离 月开通214家 | IT桔子
新闻:融资600万 他用一套系统优化15大HR工作场景 精简入转调离 月开通214家 | IT桔子 功劳说不上
- nuxt.js 加百度统计
Mark一下: 在 Nuxt.js应用中使用Google统计分析服务,或者百度统计分析服务,推荐在 plugins 目录下创建 plugins/ga.js 文件.统计统计分析我们可以获取网站pv,uv ...
- LSA、LDA
Latent semantic analysis (LSA) is a technique in natural language processing, in particular distrib ...
- 【Android小项目】找不同,改编自"寻找房祖名"的一款开源小应用。
近期在微信朋友圈"寻找房祖名"和"万里寻刀"这类小游戏比較火.我试着写了一个android版本号的,里面全是一系列的形近字,实现原理非常easy:用一个Grid ...
- 三联动 支持ie6,ie7 省,市,区
三联动 支持ie6,ie7 省,市,区 <html xmlns="http://www.w3.org/1999/xhtml"> <head> <tit ...
- The user's guide what comes in the kernel Documentation directory
The Linux IPMI Driver --------------------- Corey Minyard <minyard@mvista.com> <minyard@acm ...
- @Transactional 无效的解决方案
1 .在需要事务管理的地方加@Transactional 注解.@Transactional 注解可以被应用于接口定义和接口方法.类定义和类的 public 方法上 . 2 . @Transactio ...