当爬取到 Html 数据后,可以用正则对数据进行提取,但有时候正则表达式编写起来不方便,而且万一写错了,可能导致匹配失败。这时候就需要借助其他解析工具了。
XML 引入
什么是 XML?
XML 指可扩展标记语言(EXtensible Markup Language)
XML 是一种标记语言,很类似 HTML
XML 的设计宗旨是传输数据,而非显示数据
XML 的标签需要我们自行定义。
XML 被设计为具有自我描述性。
XML 是 W3C 的推荐标准
W3School 官方文档:http://www.w3school.com.cn/xm…
XML 和 HTML 的区别
语法要求不同
在 html 中不区分大小写,在 xml 中严格区分。
在 HTML 中,有时不严格,如果上下文清楚地显示出段落或者列表键在何处结尾,那么你可以省略 </p> 或者 </li> 之类的结束标记。在 XML 中,是严格的树状结构,绝对不能省略掉结束标记。
在 XML 中,拥有单个标记而没有匹配的结束标记的元素必须用一个 / 字符作为结尾。这样分析器就知道不用查找结束标记了。
在 XML 中,属性值必须分装在引号中。在 HTML 中,引号是可用可不用的。
在 HTML 中,可以拥有不带值的属性名。在 XML 中,所有的属性都必须带有相应的值。
在 XML 文档中,空白部分不会被解析器自动删除;但是 html 是过滤掉空格的。
设计目标不同
XML 被设计为传输和存储数据,其焦点是数据的内容。
HTML 显示数据以及如何更好显示数据。
XML 的节点关系
1、父 (parent) 每个元素以及属性都有一个父。下面是一个简单的 XML 例子中,book 元素是 title、author、year 以及 price 元素的父:
<?xml version=”1.0″ encoding=”utf-8″?>
<book>
<title>Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
2、子(Children)元素节点可有零个、一个或多个子。在下面的例子中,title、author、year 以及 price 元素都是 book 元素的子:
<?xml version=”1.0″ encoding=”utf-8″?>
<book>
<title>Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
3、同胞(Sibling)拥有相同的父的节点在下面的例子中,title、author、year 以及 price 元素都是同胞:
<?xml version=”1.0″ encoding=”utf-8″?>
<book>
<title>Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
4、先辈(Ancestor)某节点的父、父的父,等等。在下面的例子中,title 元素的先辈是 book 元素和 bookstore 元素:
<?xml version=”1.0″ encoding=”utf-8″?>
<bookstore>
<book>
<title>Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
</bookstore>
5、后代(Descendant)某个节点的子,子的子,等等。在下面的例子中,bookstore 的后代是 book、title、author、year 以及 price 元素:
<?xml version=”1.0″ encoding=”utf-8″?>
<bookstore>
<book>
<title>Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
</bookstore>
Xpath
什么是 Xpath?
Xpath,全称 XML Path Language,即 XML 路径语言,它是一门在 XML 文档中查找信息的语言,可用来在 XML 文档中对元素和属性进行遍历。。最初是用来搜寻 XML 文档的,但是它也适用与 HTML 文档的搜索。所以在做爬虫时,可以使用 XPath 来做相应的信息抽取。
W3School 官方文档:http://www.w3school.com.cn/xp…
Xpath 开发工具
开源的 XPath 表达式编辑工具:XMLQuire(XML 格式文件可用)
Chrome 插件 XPath Helper
Firefox 插件 XPath Checker
使用 Xpath
XPath 使用路径表达式来选取 XML 文档中的节点或者节点集。这些路径表达式和我们在常规的电脑文件系统中看到的表达式非常相似。1、Xpath 常用规则
表达式
描述
nodename
选取此节点的所有子节点
/
从当前节点选取直接子节点
//
从当前节点选取子孙节点
.
选取当前节点
..
选取当前节点的父节点
@
选取属性
2、Xpath 使用示例以下面 xmL 文档为例:
<?xml version=”1.0″ encoding=”utf-8″?>
<bookstore>
<book>
<title>Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
</bookstore>
路径表达式
结果
bookstore
选取 bookstore 元素的所有子节点
/bookstore
选取根元素 bookstore。注: 假如路径起始于正斜杠 /, 则此路径代表某元素的绝对路径
bookstore/book
选取属于 bookstore 的子元素的所有 book 元素
//book
选取所有 book 元素,不管在文档的任何位置
bookstore//book
选择属于 bookstore 元素的后代的所有 book 元素,而不管它们位于 bookstore 之下的什么位置。
//@lang
选取名为 lang 的所有属性
lxml 库使用
lxml 库安装
lxml 官网
Github
1、window 安装 cmd 进入命令行模式,执行
pip3 install lxml
2、ubuntu16.04 安装 ctrl+alt+ t 进入终端模式,执行:
sudo apt-get install -y build-essential libssl-devl libffi-dev libxml2-dev libxslt1-dev zlib1g-dev
安装依赖的类库后,执行 pip 安装:
sudo pip3 install lxml
3、验证安装导入 lxml 模块,如果没有报错就安装成功。
$ python3
>>> import lxml
etree 模块使用