python 爬虫(六)XML的介绍(与HTML的区别 + 节点关系) + XPATH语法内容(选取节点 + 谓语 + 选取未知节点 + 选取若干路径 + XPath的运算符)
文章目录
一、XML
1. 什么是XML
定义: XML 指可扩展标记语言(EXtensible Markup Language)
特点: XML 被设计为具有自我描述性,是一种半结构化数据
作用: XML 的设计宗旨是传输数据,而非显示数据。可以作为配置文件记录一些重要的配置信息
-
XML 的标签需要我们自行定义。
-
XML 是一种标记语言,很类似 HTML
-
XML 被设计为具有自我描述性,是一种半结构化数据
-
XML 是 W3C 的推荐标准
W3School官方文档:http://www.w3school.com.cn/xml/index.asp
2.XML和HTML的区别
他们两者都是用于操作数据或者结构数据,在结构上大致相同的,但他们在本质上却存在着明显的区别。
1.语法要求不同
-
在html中不区分大小写,在xml中严格区分大小写
-
在html中,有时不严格,如果上下文清楚地显示出段落或者列表键在何处结尾,那么你可以省略</p>或者</li>标记。在xml中,是严格的树状结构,必须头尾对应,绝对不能省略任何标记。
-
在xml中,单标签要以/结尾 <a href=‘www’/>
-
在xml中,属性值必须分装在引号中。在html中,引号可用可不用。
-
在html中属性名可以不带属性值 class = ‘’,xml必须带属性值,不能为空 class = ‘abc’
-
xml文档中,空白部分不会被解析器自动删除,但是html是过滤掉空格的
总结:xml的语法要求更严格。
2. 标记不同
-
html使用固有的标记,xml没有固有标记
-
html标签是预定义的,xml标签是自定义的、可扩展的。
3. 作用不同
-
html是用来显示数据的;xml是用来描述数据、存放数据的,所以可以作为持久化的介质。
-
xml设计的焦点是数据的内容。html设计的焦点是数据的外观。
-
xml不是html的替代品,xml和html是两种不同用途的语言。
-
对于xml最好的描述可能是:xml是一种跨平台的,与软硬件无关的、处理与传输信息的工具。
3. XML的节点关系
(1)父节点(Parent)
每个元素以及属性都有一个父节点。
下面是一个简单的XML例子中,book 元素是 title、author、year 以及 price 元素的父节点:
(2)子节点(Children)
元素节点可有零个、一个或多个子节点。
在下面的例子中,title、author、year 以及 price 元素都是 book 元素的子节点:
(3)同胞(Sibling)
拥有相同的父节点。
在下面的例子中,title、author、year 以及 price 元素都是同胞:
(4)先辈(Ancestor)
某节点的父节点、父节点的父节点,等等。
在下面的例子中,title 元素的先辈是 book 元素和 bookstore 元素:
(5)后代(Descendant)
某个节点的子节点,子节点的子节点,等等。
在下面的例子中,bookstore 的后代是 book、title、author、year 以及 price 元素:
二、XPATH
1. 什么是XPath
XPATH是一种语法,用来提取html或者XML页面内容的语法
XPath (XML Path Language) 是一门在 XML 文档中查找信息的语言,可用来在 XML 文档中对元素和属性进行遍历。
W3School官方文档:http://www.w3school.com.cn/xpath/index.asp
2. XPATH语法内容
必备知识:
语法知识 | 含义 |
---|---|
元素 | 指一个xml的标签以及标签的所有内容 |
属性 | class,name |
标签 | 和元素一样 |
内容 | 标签包括的文本内容 如a标签的内容就是aaaa(不包括b标签),b标签的内容就是bbbb; <a>aaaa<b>bbbb</b></a> |
1. 选取节点
XPath 使用路径表达式来选取 XML 文档中的节点或者节点集。这些路径表达式和我们在常规的电脑文件系统中看到的表达式非常相似。
下面列出了最常用的路径表达式:
表达式 | 描述 |
---|---|
nodename | 选取此标签(节点)的所有子标签(节点) |
/ | 从根节点开始选取 |
// | 从任意位置开始选取 |
. | 选取当前节点 |
.. | 选取当前节点的父节点 |
@ | 选取属性 |
text() | 选取标签当中的值(内容) |
实例:
详解
2. 谓语
英语中谓语用来限定
XPATH的谓语也是限定选取内容的
接上图
路径 | 表达式语义 |
---|---|
/bookstore/book[1] | 表示取bookstroe下面的第一个book标签 |
/bookstore/book[last()] | 表示取bookstroe下面的最后一个book标签 |
/bookstore/book[last()-1] | 表示取bookstroe下面倒数第二个book标签 |
/bookstore/book[position()>1] | 跳过第一本书,选取第二本以及第二本以后的书 |
/bookstore/book[position()<2] | 选取第一本书,第二本书以前的书 |
总结:谓语用来查找某个特定的节点或者包含某个指定的值的节点,被嵌在方括号中。
3. 选取未知节点
通配符 | 描述 |
---|---|
@* | 匹配任意属性的节点(匹配任何属性) |
* | 匹配任意元素的节点 |
node() | 匹配任何类型的节点 |
在下面的表格中,列出了一些路径表达式,以及这些表达式的结果:
4. 选取若干路径
通过在路径表达式中使用“|”运算符,您可以选取若干个路径。在下面的表格中,列出了一些路径表达式,以及这些表达式的结果:
5. XPath的运算符
下面列出了可用在 XPath 表达式中的运算符
注意:这些就是XPath的语法内容,在运用到Python抓取时要先转换为xml。