码迷,mamicode.com
首页 > 编程语言 > 详细

Python 爬虫 解析库的使用 --- XPath

时间:2019-03-09 15:26:43      阅读:289      评论:0      收藏:0      [点我收藏+]

标签:字符串   一起   现在   文本   简洁   元素   要求   w3c标准   其他   

一、使用XPath 

XPath ,全称XML Path Language,即XML路径语言,它是一门在XML文档中查找信息的语言。它最初是用来搜寻XML文档的,但是它同样适用于HTML文档的搜索。

所以在爬虫时,我们完全可以使用XPath来做相应的信息提取。本次随笔中,我们就介绍XPath的基本用法。

 

1.XPath概览

XPath的选择功能十分强大,它提供了非常简洁明了的路径选择表达式。另外,它还提供了超过100个内建函数,用于字符串、数值、时间的匹配以及节点。序列的处理等。几乎所有我们想要定位的节点,都可以用XPath来选择。

XPath与1999年11月16日成为W3C标准,它被设计为供XSLT/XPointer以及其他XML解析软件使用,更多的文档可以访问其官方网站:http://www.w3school.com.cn/xpath/index.asp

 

2.XPath 常用规则

我列举了几个常用规则:

表达式 描述
nodename 选取此节点的所有子节点
/ 从当前节点选取直接子节点
// 从当前节点选取子孙节点
. 选取当前节点
.. 选取当前节点的父节点
@ 选取属性

 

这里列举出XPath的常用匹配规则,示例如下:

//title[@lang=‘eng‘]

这就是一个XPath规则,它代表选择所有名称为title,同时属性lang的值为eng的节点。

后面会通过Python的lxml库,利用XPath进行HTML 的解析。

 

3.准备工作

使用之前要安装好lxml库

 

4.实例引入

现在通过实例来感受一下使用XPath来对网页进行解析的过程,相关代码如下:

省略

首先我们导入 from lxml import etree ,然后声明了一段HTML 文本,调用HTML类进行初始化,这样就成功构造了一个XPath解析对象。需要注意的是etree模块可以自定修正HTML文本。

这里我们调用tosting()方法即可输出修正后的HTML文本,但是结果是bytes类型。这里利用decode()方法将其转成str类型。

另外,也可以直接读取文本文件进行解析。

 

5.所有节点

我们一般会用//开头的XPath规则来获取所有符合要求的节点。

*代表匹配所有节点,也就是整个HTML文本中的所有节点都会被获取。返回形式是一个列表,每一个元素是Element类型,其后跟了节点的名称,如html、body、div、ul、li、a等,所有节点都包含在列表中了。

当然,匹配也可以指定节点名称。//后直接加上节点名称即可。,列表获取其中直接用中括号加索引。

 

6.子节点

我们通过/或//即可查找元素的子节点或者子孙节点。

result = html.xpath(‘//li/a‘)

这里通过追加/a即选择了所有li节点的所有直接a子节点。因为//li用于选中所有li节点,/a用于选中li节点的所有直接子节点a,二者组合在一起即获取所有li节点的所有直接a子节点。

 

此处的/用于获取直接子节点,如果想要获取所有子孙节点,就可以使用//。

result = html.xpath(‘//ul//a‘)

 

7.父节点

我们知道通过/或//即可查找元素的子节点或者子孙节点,那么假如我们知道了自己子节点,怎样来查找父节点呢?

 

Python 爬虫 解析库的使用 --- XPath

标签:字符串   一起   现在   文本   简洁   元素   要求   w3c标准   其他   

原文地址:https://www.cnblogs.com/zhangrenguo/p/10500919.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!