XPath语法和lxml模块

XPath

lxml库

1.什么是XPath?

XPath (XML Path Language) 是一门在 XML 文档中查找信息的语言,可用来在 XML 文档中对元素和属性进行遍历。

2.XPath 开发工具

开源的XPath表达式编辑工具:XMLQuire(XML格式文件可用)

Chrome插件 XPath Helper

Firefox插件 XPath Checker

3.Chrome中安装XPath 开发工具不能使用

解决方法:参考https://blog.csdn.net/Cayny/article/details/81396711

1.重启浏览器,快捷键CTRL+SHIFT+X开启XPath Helper插件;

2.长按CTRL+SHIFT,鼠标指向需提取的段落,按X开启或关闭提取,提取到的段落会变为黄色。

4.选取节点

XPath 使用路径表达式来选取 XML 文档中的节点或者节点集。这些路径表达式和我们在常规的电脑文件系统中看到的表达式非常相似。

下面列出了最常用的路径表达式:

表达式描述

nodename

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

/

从根节点选取。

//

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

.

选取当前节点。

..

选取当前节点的父节点。

@

选取属性。

在下面的表格中,我们已列出了一些路径表达式以及表达式的结果:

路径表达式结果

bookstore

选取 bookstore 元素的所有子节点。

/bookstore

选取根元素 bookstore。注释:假如路径起始于正斜杠( / ),则此路径始终代表到某元素的绝对路径!

bookstore/book

选取属于 bookstore 的子元素的所有 book 元素。

//book

选取所有 book 子元素,而不管它们在文档中的位置。

bookstore//book

选择属于 bookstore 元素的后代的所有 book 元素,而不管它们位于 bookstore 之下的什么位置。

//@lang

选取名为 lang 的所有属性。

5.谓语(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。

//div[contains(@class,"f1")]

选择div属性包含"f1"的元素

6.选取未知节点

XPath 通配符可用来选取未知的 XML 元素。

通配符描述

*

匹配任何元素节点。

@*

匹配任何属性节点。

node()

匹配任何类型的节点。

在下面的表格中,我们列出了一些路径表达式,以及这些表达式的结果:

路径表达式结果

/bookstore/*

选取 bookstore 元素的所有子元素。

//*

选取文档中的所有元素。

html/node()/meta/@*

选择html下面任意节点下的meta节点的所有属性

//title[@*]

选取所有带有属性的 title 元素。

7.选取若干路径

通过在路径表达式中使用“|”运算符,您可以选取若干个路径。

实例

在下面的表格中,我们列出了一些路径表达式,以及这些表达式的结果:

路径表达式结果

//book/title | //book/price

选取 book 元素的所有 title 和 price 元素。

//title | //price

选取文档中的所有 title 和 price 元素。

/bookstore/book/title | //price

选取属于 bookstore 元素的 book 元素的所有 title 元素,以及文档中所有的 price 元素。

8.XPath的运算符

下面列出了可用在 XPath 表达式中的运算符:

这些就是XPath的语法内容,在运用到Python抓取时要先转换为xml。

lxml库

lxml 是 一个HTML/XML的解析器,主要的功能是如何解析和提取 HTML/XML 数据。

lxml和正则一样,也是用 C 实现的,是一款高性能的 Python HTML/XML 解析器,我们可以利用之前学习的XPath语法,来快速的定位特定元素以及节点信息。

需要安装C语言库,可使用 pip 安装:pip install lxml (或通过wheel方式安装)

1.lxml简单使用

.xpath() 返回值是一个列表,取值时需要注意

#encoding: utf-8

#导入etree时需要手动,不会有提示

from lxml importetree

text= """

职位名称 职位类别 人数 地点 发布时间 22989-金融云区块链高级研发工程师(深圳) 技术类 1 深圳 2017-11-25 """

#从字符串中读取

defparse_text():

htmlElement=etree.HTML(text)print(etree.tostring(htmlElement,encoding='utf-8').decode("utf-8"))#从文件中读取html代码

defparse_tencent_file():

htmlElement= etree.parse("tencent.html")print(etree.tostring(htmlElement, encoding='utf-8').decode('utf-8'))#解析html,指定解析器,有时候html代码不规范需要指定解析器

defparse_lagou_file():#指定解析器

parser = etree.HTMLParser(encoding='utf-8')

htmlElement= etree.parse("lagou.html",parser=parser)print(etree.tostring(htmlElement, encoding='utf-8').decode('utf-8'))if __name__ == '__main__':

parse_text()#parse_file()

#parse_lagou_file()

2.lxml和xpath结合使用

from lxml importetree#1. 获取所有tr标签#2. 获取第2个tr标签#3. 获取所有class等于even的tr标签#4. 获取所有a标签的href属性#5. 获取所有的职位信息(纯文本)

parser= etree.HTMLParser(encoding='utf-8')

html= etree.parse("tencent.html",parser=parser)#1. 获取所有tr标签#//tr#xpath函数返回的是一个列表#trs = html.xpath("//tr")#for tr in trs:#print(etree.tostring(tr,encoding='utf-8').decode("utf-8"))

#2. 获取第2个tr标签#tr = html.xpath("//tr[2]")[0]#print(etree.tostring(tr,encoding='utf-8').decode("utf-8"))

#3. 获取所有class等于even的tr标签#trs = html.xpath("//tr[@class='even']")#for tr in trs:#print(etree.tostring(tr,encoding='utf-8').decode("utf-8"))

#4. 获取所有a标签的href属性#aList = html.xpath("//a/@href")#for a in aList:#print("http://hr.tencent.com/"+a)

#5. 获取所有的职位信息(纯文本)

trs = html.xpath("//tr[position()>1]")

positions=[]for tr intrs:#在某个标签下,再执行xpath函数,获取这个标签下的子孙元素

#那么应该在//之前加一个点,代表是在当前元素下获取

href = tr.xpath(".//a/@href")[0]

fullurl= 'http://hr.tencent.com/' +href

title= tr.xpath("./td[1]//text()")[0]

category= tr.xpath("./td[2]/text()")[0]

nums= tr.xpath("./td[3]/text()")[0]

address= tr.xpath("./td[4]/text()")[0]

pubtime= tr.xpath("./td[5]/text()")[0]

position={'url': fullurl,'title': title,'category': category,'nums': nums,'address': address,'pubtime': pubtime

}

positions.append(position)print(positions)

注意:

## lxml结合xpath注意事项:

1. 使用`xpath`语法。应该使用`Element.xpath`方法。来执行xpath的选择。示例代码如下:

```python

trs= html.xpath("//tr[position()>1]")

```

`xpath函数`返回来的永远是一个列表。2. 获取某个标签的属性:

```python

href= html.xpath("//a/@href")#获取a标签的href属性对应的值

```3. 获取文本,是通过`xpath`中的`text()`函数。示例代码如下:

```python

address= tr.xpath("./td[4]/text()")[0]

```4. 在某个标签下,再执行xpath函数,获取这个标签下的子孙元素,那么应该在斜杠之前加一个点,代表是在当前元素下获取。示例代码如下:

```python

address= tr.xpath("./td[4]/text()")[0]5.xpath解析器下元素下标从1开始

注意事项

python xpath语法-XPath语法和lxml模块(数据提取)相关推荐

  1. html文件xpath解析语法,数据解析之XPath语法和lxml模块

    什么是XPath? xpath(XML Path Language)是一门在XML和HTML文档中查找信息的语言,可用来在XML和HTML文档中对元素和属性进行遍历. XPath开发工具 Chrome ...

  2. python xpath语法-Python爬虫之XPath语法和lxml库的用法

    本来打算写的标题是XPath语法,但是想了一下Python中的解析库lxml,使用的是Xpath语法,同样也是效率比较高的解析方法,所以就写成了XPath语法和lxml库的用法 安装 为什么要用这个库 ...

  3. python xpath语法-XPath 语法

    XPath 语法 XPath 使用路径表达式来选取 XML 文档中的节点或节点集.节点是通过沿着路径 (path) 或者步 (steps) 来选取的. XML 实例文档 我们将在下面的例子中使用这个 ...

  4. Python爬虫原理与常用模块——数据提取与清洗策略

    1 正则表达式 1.1概念 世界上信息非常多,而我们关注的信息有限.假如我们希望只提取出关注的数据,此时可以通过一些表达式进行提取,正则表达式就是其中一种进行数据筛选的表达式. 正则表达式(Regul ...

  5. python全栈开发-json和pickle模块(数据的序列化)

    一.什么是序列化? 我们把对象(变量)从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling,在其他语言中也被称之为serialization,marshalling,flat ...

  6. Python中比较好用的PDF模块——发票金额提取

    参考文档:常用Python PDF库对比 上文中:列举了几个常用的Python中PDF的模块. 我自己的应用场景是将发票金额提取,并用金额去命名pdf文件名. 经过个人测试:PyMuPDF模块效果显著 ...

  7. python爬虫获取标签规则_Python爬虫之数据提取-selenium定位获取标签对象并提取数据...

    ## selenium提取数据 知识点:了解 driver对象的常用属性和方法 掌握 driver对象定位标签元素获取标签对象的方法 掌握 标签对象提取文本和属性值的方法 1. driver对象的常 ...

  8. Python爬虫学习之第七天---数据提取-lxml模块和Xpath使用

    爬虫学习之第七天-数据提取-lxml模块和Xpath使用 知识点:了解 lxml模块和xpath语法的关系了解 lxml模块的使用场景了解 lxml模块的安装了解 谷歌浏览器xpath helper插 ...

  9. python网络爬虫系列(六)——数据提取 lxml模块

    一.数据提取-lxml模块 知识点 了解 lxml模块和xpath语法的关系 了解 lxml模块的使用场景 了解 lxml模块的安装 了解 谷歌浏览器xpath helper插件的安装和使用 掌握 x ...

最新文章

  1. 内存空间分几部分:代码段、数据段,栈,堆 (收集整理)
  2. Win32 像素格式描述符学习
  3. JVM 参数含义:-Xms和-Xmx
  4. 极客青年说,北京沙龙
  5. mybatis学习(2):基本设置和核心配置
  6. 7-25 念数字 (15 分)
  7. 关于北大陈秉乾教授的一些趣事
  8. 跨域技术-jsonp
  9. java小数的数据类型_Java的基本数据类型
  10. http://www.spiceworks.com
  11. 【搜索引擎】提高 Solr 性能
  12. 计算机无法识别游戏手柄,Win10系统使用游戏xbox游戏手柄提示“无法识别”的解决办法...
  13. 分享一些可用的淘宝(1688)关于订单信息获取的相关接口(开放API收费)
  14. python喜马拉雅_Python爬虫实战案例:取喜马拉雅音频数据详解!
  15. 初学Linux服务器管理
  16. 情人节表白专用代码,希望你成功
  17. WinEdt的bib参考文献管理教程
  18. 简述php的特点,PHP语言有哪些优势和特点(三)
  19. 不让粘贴的数字在excel中以科学计数法形式显示
  20. mysql字段掩码_access字段输入掩码之字符篇

热门文章

  1. 大数据平台安全标准设计
  2. Mac NIFI 安装
  3. angular指令:tm.tags添加/删除标签
  4. 各种视频编码器的命令行格式
  5. windows mongodb 安装
  6. Visual Studio 2013 Update 2 and with Update 2
  7. 利用JDK动态代理机制实现简单拦截器
  8. Python之os.walk()与os.path.walk()
  9. button/input链接方式全攻略 [转]
  10. 简单的JSP登录程序