Part1 爬虫简介
爬虫在使用场景中的分类
通用爬虫:
获取系统重要组成部分,抓取的是一整张页面的数据
聚焦爬虫:
- 是建立在通用爬虫的基础之上,抓取的页面中特定的局部内容。
增量式爬虫:
- 检测网站中数据更新的情况,只会抓取网站中最新更新出来的数据。
反爬机制
门户网站可以通过制定相应的策略或者技术手段,房子爬虫程序进行网站数据的爬取
反反爬策略
爬虫程序可以通过制定相关的策略或技术手段,破解门户网站具备的反爬机制,从而可以获取门户网站
robots.txt协议
君子协议,规定了网站中那些数据可以被爬虫爬取那些数据不可以被爬取
Part2 http协议
— 概念:就是服务器和客户端进行数据交互的一种形式。
— 请求头信息:User-Agent:请求载体的身份标识
— Connection:请求完毕后,是断开连接还是保持连接
— Content-Type:服务器响应回客户端的数据类型
https协议:
— 安全的超文本传输协议,涉及到数据加密
加密方式:
- 对称密钥加密
- 非对称密钥加密
- 证书密钥加密(采用该方式)
请求:
1.请求行 -> 请求方式(get/post) 请求url地址 协议
2.请求头 -> 放一些服务器要使用的附加信息,加请求头可以伪装的更像浏览器,一个反爬小处理
3.请求体 -> 一段放一些请求参数
响应:
1.状态行 -> 状态码 404
2.响应头 -> 放一些客户端要是用的一些附加信息
3.响应体 -> 服务器返回的真正可客户端要用的内容(HTML、Json)等
请求头中最常见的一些重要内容(爬虫需要)
1.User-Agent:请求载体的身份标识(用什么浏览器发送的请求)
2.Referer:防盗链(这次请求是从哪个页面来的?反爬会用到)
3.Cookie:本地字符串数据信息(用户登录信息,反爬的token)
响应头中的一些重要内容
1.cookie:本地字符串数据信息(用户登录信息,反爬的token)
2.各种神奇的莫名奇妙的字符串(需要经验,一般都是token字样,防止各种攻击和反爬)
请求方式
GET: 显示提交
POST: 隐式提交
上述两行了解即可
Part3数据解析与提取
三种数据解析方式
- re解析
- bs4解析
- xpath解析
这三种方式可以混合进行使用,完全以结果做导向,只要能拿到你想要的数据,用什么方案并不重要,掌握这些之后,再考虑性能的问题
正则表达式
Regular Expression,正则表达式,一种使用表达式的方式对字符串进行匹配的语言法则
我们抓取到的网页源代码本质上就是一个超长的字符串,想从里面提取内容,用正则很合适
正则的优点:速度快,效率高,准确性高
正则的语法:使用元字符进行排列组合用来匹配字符串,在线测试正则表达式
元字符:具有固定含义的特殊符号
常用元字符:
1 . 匹配除换行以外的任意字符
2 \w 匹配字符或数字或下划线
3 \s 匹配任意的空白符
4 \d 匹配数字
5 \n 匹配一个换行符
6 \t 匹配一个制表符
7 ^ 匹配字符串的开始
8 $ 匹配字符串的开始
9 \W 匹配非字符或数字或下划线
10 \D 匹配非数字
11 \S 匹配非空白字符
12 a|b 匹配字符a或字符b
13 () 匹配括号内的表达式,也表示一个组
14 [...] 匹配字符组中的字符
15 [^...] 匹配除了字符组中字符的所有字符
量词:控制前面的元字符出现的次数
1 * 重复零次或更多次
2 + 重复一次或更多次
3 ? 重复零次或一次
4 {n} 重复n次
5 {n,} 重复n次或更多次
6 {n,m} 重复n到m次
贪婪匹配和惰性匹配
1 .* 贪婪匹配 #尽可能多匹配
2 .*? 惰性匹配 #尽可能少的匹配
re模块
(?P<分组名字>正则) 可以单独从正则匹配的内容中进一步提取内容
函数 | 说明 |
---|---|
re.search() | 在一个字符中搜索匹配正则表达式的第一个位置,返回match对象 |
re.match() | 从一个字符串的开始位置匹配正则表达式,返回match对象 |
re.findall() | 搜索字符串,以列表类型返回全部能匹配的子串 |
re.split() | 将一字符串按照正则表达式匹配结果进行分割,返回列表类型 |
re.finditer() | 搜索字符串,返回一个匹配结果的迭代类型,每个迭代元素是match对象 |
re.sub() | 在一个字符串中替换所有匹配正则表达式的子串,返回替换后的字符串 |
修饰符 | 描述 |
---|---|
re.I | 是匹配对大小写不敏感 |
re.L | 做本地化识别(locale-aware)匹配 |
re.M | 多行匹配,影响 ^ 和 $ |
re.S | 使 . 匹配包括行在内的所有字符 |
re.U | 根据Unicode字符集解析字符,这个标志影响\w,\W,\b,\B |
re.X | 该标志通过给予你灵活的格式以便将正则表达式写的更容易理解 |