一周目,爬虫 三日
re模块与requests模块
1 re模块
1.1 re模块匹配数据的方法
方法 findall
re.findall(正则代码,查找内容) 查找所有符合的数据并将结果放再列表中
方法 finditer
re.finditer(正则代码,查找内容) 查找所有的数据,用迭代器展示,只有向迭代器索要,才会产生数据
方法 search
re.search(正则代码,查找内容) 只要查找到一个满足正则代码的数据就结束
方法 match
re.match(正则代码,查找内容) 从头开始查找,头部不符合直接结束
1.2 分组在re模块中的运用
()在re模块中使用时,会优先展示括号内正则匹配到的内容
取消分组优先展示用?: 冒号后为正则代码
即(?:)
2 网络请求方法之get、post
2.1 get请求
向服务器索要数据
get请求可以携带额外的数据 但是数据量有限制最多2~4KB 并且是直接写在网址的后面
以 url?xxx=yyy&zzz=mmm 形式存在
2.2 post请求
向服务器提交数据
post请求可以携带额外的数据 并且数据大小没有限制 敏感性的数据都是由post请求携带
3 HTTP协议
3.1 HTTP协议意义
用于统一游览器与服务端之间数据交换的方式
3.2 HTTP协议四大特性
3.2.1 基于请求响应
只有客户端主动请求才会响应,不会主动向客户端发出请求
3.2.2 TCP、IP作用于应用层上的协议
3.2.3 无状态
回应完请求就会结束,不会保存客户端的数据
3.2.4 无连接
客户端与服务端不会产生任何联系
3..3 数据请求格式
3.3.1请求数据格式
请求首行 —— 方法、地址等
请求头 —— k:v键值对的信息
请求体 —— get无请求体,post的请求体内部携带敏感数据
3.3.2响应数据格式
响应首行 —— 响应状态码 协议版本等
响应头 —— K:V键值对信息
响应体 —— 一般是给浏览器展示给用户看的数据
3.4响应状态码
用简单的数字来表示一串中文意思(制定暗号)
1XX : 服务端已经成功接收到了你的数据正在处理 你可以继续提交或者等待
2XX : 200 OK请求成功服务端发送了响应
3XX : 重定向(原本想访问A页面但是内部自动跳到了B页面)
4XX : 403请求不符合条件 404请求资源不存在
5XX : 服务器内部错误
此外公司会另外自定义响应状态码
4 requests模块
4.1 模块作用
模拟游览器发生网络请求
4.2 发送网络请求
import requests
requests.get(url) # 发送get请求
requests.post(url) # 发送post请求
4.3 获取百度首页请求模板
import requests
# 朝百度发送get请求获取首页数据
res = requests.get('https://www.baidu.com/')
# 写入获取的数据
with open(r'baidu.html', 'wb') as f:
f.write(res.content)
补充
res.status_code # 获取响应状态码
res.encoding = 'utf8' # 指定字符编码
res.text # 获取网页字符串数据
res.content
# 获取bytes类型的数据(在python中可以直接看成是二进制)
4.4 发送请求,携带额外参数
方法 params={}
requests.get(url,params={})
5 防爬措施
5.1 防爬措施
校验请求是否是游览器发出
校验代码是请求头里面的User-Agent键值对,该键值对可以看成是游览器的身份令牌
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36
5.2 请求头
方法 headers={}
requests.get(url,headers={})