爬虫基础(6)网页解析之XPath库

一. XPath库简介

XPath 全称 XML Path Language,即 XML 路径语言,它是一门在 XML 文档中查找信息的语言。它最初是用来搜寻 XML 文档的,但是它同样适用于 HTML 文档的搜索。所以在做爬虫时,我们完全可以使用 XPath 来做相应的信息抽取。

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

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

二. 安装lxml库

在 Ubuntu 虚拟机中,lxml 能通过 pip 来安装:

$ python -m pip install lxml
或者
$pip install lxml

其他平台下的安装可参考其他相应的安装方式,此处不做概述。

三. XPath库详析

1. XPath常用的规则
表达式 描述
nodename 选取此节点的所有子节点
/ 从当前节点选取直接子节点
// 从当前节点选取子孙节点
. 选取当前节点
.. 选取当前节点的父节点
@ 选取属性
* 选取所有元素节点与元素名
@* 选取所有属性
[@attrib] 选取具有给定属性的所有元素
[@attrib='value'] 选取给定属性具有给定值得所有元素
[tag] 选取所有具有指定元素的直接子节点
[tag='text'] 选取所有具有指定元素并且文本内容是text的节点
2. 选取所有节点

一般我们会用// 开头的XPath规则来选择所有符合要求的节点。我们看看下面的示例:

from lxml import etree

html = etree.parse('./test.html', etree.HTMLParser())
result = html.xpath('//*')
print(result)

# 运行结果:
[<Element html at 0x7f8a1a02a748>, <Element body at 0x7f8a1a02a848>, <Element div at 0x7f8a1a02a888>, <Element div at 0x7f8a1a02a8c8>, <Element div at 0x7f8a1a02a908>, <Element ul at 0x7f8a1a02a988>, <Element li at 0x7f8a1a02a9c8>, <Element a at 0x7f8a1a02aa08>, <Element li at 0x7f8a1a02aa48>, <Element a at 0x7f8a1a02a948>, <Element li at 0x7f8a1a02aa88>, <Element a at 0x7f8a1a02aac8>, <Element li at 0x7f8a1a02ab08>, <Element a at 0x7f8a1a02ab48>, <Element div at 0x7f8a1a02ab88>, <Element span at 0x7f8a1a02abc8>, <Element a at 0x7f8a1a02ac08>, <Element strong at 0x7f8a1a02ac48>, <Element span at 0x7f8a1a02ac88>, <Element a at 0x7f8a1a02acc8>, <Element span at 0x7f8a1a02ad08>, <Element a at 0x7f8a1a02ad48>, <Element span at 0x7f8a1a02ad88>]

上述代码中的test.html 文件将用于下面所有的示例中,其内容如下:

<div class="header">
    <div class="header_contain">
        <div class="logo"></div>
        <ul class="menu">
            <li><a href="../news/index.html">Home Page</a></li>
            <li><a href="../course/course.html">Online Clas
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值