文章目录
一. 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