HTML页面是由标签构成的,这些标签就像整个族谱一样排列有序,比如:
xxx ->> 太爷爷 ->> 爷爷 ->> 爸爸 ->> 儿子 ->> 孙子 ->> xxx
xxx ->> body ->> script & div@id='wrapper'等 ->> script & div@id='head'等 ->> div@class="head_wrapper" ->> 3个div ->> xxx
【如果在中间有分叉,可以理解为家族的旁系,一个爷爷有两个儿子,然后分家了】
总结:所有的HTML标签都有很强的层级关系,正是基于这种层级关系,Xpath语法能够选择出我们想要的数据。
1.节点选取
表达式 | 描述 | 用法 | 说明 |
nodename | 选取此节点的所有子节点 | div | 选取div下的所有标签 |
// | 从全局节点中选择节点,任意位置均可 | //div | 选取整个HTML页面的所有div标签 |
/ | 选取某个节点下的节点 | //head/title | 选取head标签下的title标签 |
@ | 选取带某个属性的节点 | //div[@id] | 选择带有id属性的div标签 |
. | 当前节点下 | ./span | 选择当前节点下的span标签【代码中威力强大】 |
2.谓语
表达式 | 用法说明 |
//head/meta[1] //head/meta[k] |
选择所有head下的第一个meta标签 选择所有head下的第k个meta标签 |
//head/meta[last()] | 选择所有head下的最后一个meta标签 |
//head/meta[position()<3] | 选择所有head下的前两个meta标签 |
//div[@id] | 选择带有id属性的div标签 |
//div[@id='u1'] | 选择所有拥有id=u1的div标签 |
3.通配符
通配符 | 描述 | 示例 | 结果 |
* | 匹配任意节点 | //div[@id='u1']/* | 选择所有拥有id=u1的div标签下的所有节点 |
@* | 匹配节点中的任何属性 | //meta[@*] //a[@*] |
选择所有拥有属性的meta标签 选择所有拥有属性的a标签 |
4.选取多个路径
使用 | 来表示选择多个路径:
eg: //meta | // title ->> 选择所有的meta和title.
扫描二维码即可参与该课程,解锁更多爬虫知识: