教程地址:http://www.runoob.com/xpath/xpath-tutorial.html
XPath在python的爬虫学习中,起着举足轻重的地位,对比正则表达式re两者可以完成同样的工作,实现的功能也差不多,但XPath明显比re具有优势,在网页分析上使re退居二线。
xpath全称为XML Path Language 一种小型的查询语言,所具备的优点:
1) 可在XML中查找信息
2) 支持HTML的查找
3) 通过元素和属性进行导航
XPath属于lxml库模块,所以首先要安装库lxml。
简单示例:
from lxml import etree
selector=etree.HTML(源码) #将源码转化为能被XPath匹配的格式
selector.xpath(表达式) #返回为一列表
+ xpath与bs4比较
(1)bs4是用python写的第三方库,XPath是一门语言,lxml是用c写的,速度块;
(2)xpath要求一定清楚文档层次结构,它通过元素和属性进行导航,可以使用绝对路径或相对路径查找,而bs4不必清楚文档结构,可以直接找某些标签,简单粗暴。
+ 路径表达式
nodename 选取此节点的所有子节点。
/ 从根节点选取。
// 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
. 选取当前节点。
.. 选取当前节点的父节点。
@ 选取属性。
/text() 获取当前路径下的文本内容
starts-with 解决标签属性值以相同字符串开头的情况
+ 谓语
谓语用来查找某个特定的节点或者包含某个指定的值的节点。谓语被嵌在方括号中。
+ 通配符
* 匹配任何元素节点。
@* 匹配任何属性节点。
node() 匹配任何类型的节点。
| 选取若干路径
+ 轴
轴可定义相对于当前节点的节点集。
ancestor 选取当前节点的所有先辈(父、祖父等)。
ancestor-or-self 选取当前节点的所有先辈(父、祖父等)以及当前节点本身。
attribute 选取当前节点的所有属性。
child 选取当前节点的所有子元素。
descendant 选取当前节点的所有后代元素(子、孙等)。
descendant-or-self 选取当前节点的所有后代元素(子、孙等)以及当前节点本身。
following 选取文档中当前节点的结束标签之后的所有节点。
following-sibling 选取当前节点之后的所有兄弟节点
namespace 选取当前节点的所有命名空间节点。
parent 选取当前节点的父节点。
preceding 选取文档中当前节点的开始标签之前的所有节点。
preceding-sibling 选取当前节点之前的所有同级节点。
self 选取当前节点。
+ 运算符
算术运算符、关系运算符、逻辑运算符