前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python爬虫之XPath语法和lxml库的用法

Python爬虫之XPath语法和lxml库的用法

作者头像
沈唁
发布2018-05-24 17:28:41
1.1K0
发布2018-05-24 17:28:41
举报
文章被收录于专栏:沈唁志沈唁志

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

安装

为什么要用这个库呢,因为要写爬虫啊,利用 lxml 库来解析 HTML 代码,同时 lxml 也继承了 libxml2 的特性自动修正 HTML 代码,利用pip安装即可

代码语言:javascript
复制
pip install lxml

XPath 语法

XPath 是一门在 XML 文档中查找信息的语言,可以用于在 XML 文档中通过元素和属性进行导航

举个栗子 ?

我们可以使用 XPath 提取网站地图中的所有链接,也就是说可以使用 XPath 去找我们 HTML 中的一些具体的东西

节点关系

在 XPath 中,有七种类型的节点:元素、属性、文本、命名空间、处理指令、注释以及文档节点(或称为根节点)

再举个栗子 ?

代码语言:javascript
复制
<urlset>
<url>
<loc>https://qq52o.me</loc>
<lastmod>2018-04-28T19:00:42+00:00</lastmod>
<changefreq>daily</changefreq>
<priority>1.0</priority>
</url>
</urlset>

第一个:父(Parent)

每个元素以及属性都有一个父

url元素是 loclastmodchangefreq以及 priority元素的父

第二个:子(Children)

元素节点可有零个、一个或多个子

loclastmodchangefreq以及 priority元素都是url元素的子

第三个:同胞(Sibling)

拥有相同的父的节点

loclastmodchangefreq以及 priority元素都是url元素的同胞

第四个:先辈(Ancestor)

某节点的父、父的父,等等

loc元素的先辈是 url元素和 urlset元素

第五个:后代(Descendant)

某个节点的子,子的子,等等

urlset的后代是urlloclastmodchangefreq以及 priority元素

如果你分不清楚,就按照子元素从上到下的去找元素节点

选取节点

XPath 使用路径表达式在 XML 文档中选取节点,节点是通过沿着路径或者 step 来选取的,也就是上面所说的按照子元素从上到下去找元素节点

这些是最有用的路径表达式 ?

表达式

描述

nodename

选取此节点的所有子节点

/

从根节点选取

//

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

.

选取当前节点

..

选取当前节点的父节点

@

选取属性

实例

路径表达式

结果

urlset

选取 urlset 元素的所有子节点

/urlset

选取根元素 urlset

urlset/url

选取属于 urlset 的子元素的所有 url 元素

//url

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

urlset//url

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

//@href

选取名为 href 的所有属性

其他 XPath 语法请参考w3school

XPath 实例测试

提取本站网站地图中 id 属性为 content 的的子元素 h3 的内容以及子元素 a 的 href 属性,F12 去看代码找这个属性

div 的 id 属性,下面的子元素 h3 的内容,直接利用 text 方法来获取元素的内容,然后输出

这里的子元素层级关系必须按顺序写好,不然会报错的

IndexError: list index out of range

这就说明你的 XPath 规则没写好,list 是一个空的,没有一个元素

XPath 是一个非常好用的解析方法,同时也是作为爬虫学习的基础

沈唁志|一个PHPer的成长之路! 原创文章采用CC BY-NC-SA 4.0协议进行许可,转载请注明:转载自:Python爬虫之XPath语法和lxml库的用法

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-05-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 安装
  • XPath 语法
    • 节点关系
      • 选取节点
        • 实例
        • XPath 实例测试
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档