文章目录
历史回顾
- 1.爬虫专题大纲
- 2.urllib、urllib2、request三者关系
- 3.urllib学习
- 4.urllib2学习
- 5.requests学习
- 6.页面提取之正则表达式
- ps:如何用浏览器抓包分析
爬虫可以分成页面下载和页面解析两个部分
页面解析就是从源码中提取出我们需要的数据的过程
xpath学习
Xpath 用于在 XML 文档中通过元素和属性进行导航。
直白点说,xpath就是一种语法(一种约定的表示规范),在任何支持这种规范的项目中,使用xpath就可以对xml进行提取。(我自己很久前用c写过一个页面解析工具,就支持xpath语法)
一切皆节点
一切皆节点(其实是DOM中的概念),即HTML或XML文档中所有内容都是节点:
- 元素节点:标签元素
- 属性节点:元素中的属性
- 文本节点:元素的文本
命名空间:处理指令注释根节点
节点关系
父节点
除根节点外,每个节点都有一个父节点
- 元素标签的父节点:是包含当前元素的上一级元素节点
- 属性节点和文本节点的父节点:是它所属的元素节点
子节点
当前元素节点包含的下一级元素节点和它的属性、文本都是这个元素的子节点
兄弟节点
拥有相同父节点的结点叫做兄弟结点(一般都是指元素节点)
路径表达式
XPath 使用路径表达式在 XML 文档中选取节点。
在形式上XPath 路径表达式和文件系统很类似:
表达式 | 说明 |
---|---|
”/“ | 斜杠作为节点的分割符 |
表达式以“/”起首,后面紧跟根结点 | 绝对路径,从根结点开始选择 |
表达式以“//”起首 | 相对路径,从当前节点开始 |
“.” | 表示当前节点 |
“…” | 表示当前节点的父节点 |
节点选择基本规则
nodename(节点名称) | 表示选择该节点即所有子节点 |
---|---|
@属性名 | 表示选择属性 |
text() | 表示选择文本 |
选择结点的谓语
xpath的谓语,对节点进一步筛选。谓语在方括号"[]"中,格式:nodename[谓语]
路径表达式 | 解释 |
---|---|
.//a[@rel] | 从当前节点开始,选择所有含有rel属性的a标签 |
//a[@rel=“home”] | 从根结点开始,选择所有rel属性值是home的a标签 |
//a[@href="http://www.tenliu.top/"][@rel="home"] |
从根结点开始,选择所有rel属性值是home,且href属性值是http://www.tenliu.top/的a标签 |
./a[1] | 从当前节点开始,在子节点中选择第一个a节点 |
xpath轴
XPath Axes直译是xpath的轴,
语法:
轴名称::节点测试[谓语]
- 轴,定义所选节点与当前节点之间的树关系
- 节点测试:识别某个轴内部的节点
- 谓语:进一步筛选
爬虫页面提取中,我是没有这种用法的习惯,不实用,只是偶尔会用到“选择兄弟结点”
轴 | 作用 | 示例 | 说明 |
---|---|---|---|
following-sibling | 兄弟节点 | ./following-sibling::link[@class] | 选择当前节点的所有兄弟结点中 含有属性class的link标签 |
xpath运算符
对爬虫的页面提取来