数据挖掘之Requests模块
1. Requests简介
- requests的底层实现就是urllib
- requests在python2和python3中通用,方法完全一样
- requests简单易用
- requests能够自动帮助我们解压(gzip压缩的等)网页内容
2. Requests的作用
作用:发送网络请求,返回响应数据
中文文档API:http://docs.python-requests.org/zh_CN/latest/index.html
3. response.text和response.content的区别
- response.text
- 类型:str
- 解码类型:根据HTTP头部对响应的编码作出有根据的推测,推测的文本编码
- 如何修改编码方式:
response.encoding= 'gbk'
- response.content
- 类型:bytes
- 解码类型:没有指定
- 如何修改编码方式:
response.content.decode('utf-8')
更推荐使用response.content.decode()
的方式获取响应的html页面
4. 发送简单的请求
通过requests向百度首页发送请求,获取百度首页的数据
response = requests.get(url)
response的常用方法:
- 获取响应字符串:
response.text
- 获取响应二进制:
response.content
- 获取响应编码:
response.status_code
- 获取请求头:
response.request.headers
- 获取响应头:
response.headers
5. 发送带header的请求
为什么请求需要带上header?
模拟浏览器,欺骗浏览器,获取和浏览器一致的内容
header的形式:字典
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36"}
用法:
requests.get(url, headers=headers)
6. 发送带参数的请求
什么叫做请求参数:
- 例1:
http://fanyi.baidu.com/#zh/en/
- 例2:
https://www.baidu.com/s?wd=python&c=b
- 参数的形式:字典
kw = {"wd":"长城"}
- 用法:
requests.get(url,params=kw)
7. 发送POST请求
用法:
response = requests.post('http://www.baidu.com/',data=data,headers=headers)
data的形式:字典
8. 使用代理
为什么爬虫需要使用代理?
- 让服务器以为不是同一个客户端在请求
- 防止我们的真实地址被泄露,防止被追究
推荐代理IP网址:
推荐准备一堆的IP地址,组成IP池,随机选择一个IP来利用
如何随机选择代理IP,让使用次数极少的IP地址有更大的可能性被用到:
"ip":ip,"times":0
[{}, {}, {}, {}]
,对这个ip的列表进行排序,按照使用次数times
进行排序- 选择使用次数较少的10个ip,从中随机选择一个
检查ip的可用性:
- 可以使用requests添加超时参数,判断ip地址的质量
- 在线代理ip质量检测的网站
9. cookie和session区别
- cookie数据存放在客户的浏览器上,session数据放在服务器上
- cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗
- session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
- 单个cookie保存的数据不能超过4k,很多浏览器都限制一个站点最多保存20个cookie
10. 爬虫处理cookie和session
带上cookie、session的好处:
能够请求到登录之后的页面
带上cookie、session的弊端:
一套cookie和session往往和一个用户对应请求太快,请求次数太多,容易被服务器识别为爬虫
不需要cookie的时候尽量不去使用cookie
但是为了获取登录之后的页面,我们必须发送带有cookies的请求
推荐携带一堆cookie进行请求,把cookie组成cookie池
11. 处理cookies、session请求
requests提供了一个叫做session类,来实现客户端和服务端的会话保持
使用方法:
实例化一个session对象
让session发送get或者post请求
session = requests.session()
response = session.get(url, headers)
12. requests模拟登录
使用requests提供的session类来请求登录之后的网站的思路:
- 实例化session
- 先使用session发送请求,登录网站,把cookie保存在session中
- 再使用session请求登录之后才能访问的网站,session能偶自动的携带登录成功时保存在其中的cookie,进行请求
不发送post请求,使用cookie获取登录后的页面:
用于cookie过期时间很长的网站
在cookie过期之间能够拿到所有的数据,比较麻烦
配合其他程序一起使用,其他程序专门获取cookie,当前程序专门请求页面
获取登录后的页面的三种方式
- 实例化session,使用session发送post请求,再使用它获取登录后的页面
- header中添加cookie键,值为cookie字符串
- 在请求方法中添加cookies参数,接收字典形式的cookie。字典形式的cookie中的键是cookie的name对应的值,值是cookie的value对应的值