requests模块的深度使用和处理cookie的3种方法

              reqeusts模块的深入使用
目标:
1.能够应用requests发送post请求的方法
2.能够应用requests模块使用代理的方法
3.了解代理ip的分类

一.使用requests发送POST请求
思考:哪些地方我们会用到POST请求?
1.登录注册( POST 比 GET 更安全)
2.需要传输大文本内容的时候( POST 请求对数据长度没有要求)

1. requests发送post请求语法:
 response = requests.post("http://www.baidu.com/", \
  data = data,headers=headers)
# data 的形式:字典

2  使用代理
2.1 为什么要使用代理
<1>让服务器以为不是同一个客户端在请求
<2>防止我们的真实地址被泄露,防止被追究
2.2 理解使用代理的过程
代理即类似中间媒介,我们发送请求到代理,代理收到请求后发送请求请求到服务器端,获取响应后再将响应发送给我们.

2.3 正向代理和反向代理
正向代理:对于浏览器知道服务器的真实地址,如VPN
反向代理:浏览器不知道服务器的真实地址,如nginx。

2.4 代理的使用
proxies = { 
      "http": "http://12.34.56.79:9527", 
      "https": "https://12.34.56.79:9527", 
      }
requests.get("http://www.baidu.com",  proxies = proxies)

2.5 代理IP的分类
<1>根据代理ip的匿名程度,代理IP可以分为下面几类:
透明代理(Transparent Proxy):透明代理虽然可以直接“隐藏”你的IP地址,但是还是可以查到你是谁。
匿名代理(Anonymous Proxy):使用匿名代理,别人只能知道你用了代理,无法知道你是谁。
高匿代理(Elite proxy或High Anonymity Proxy):高匿代理让别人根本无法发现你是在用代理,所以是最好的选择。
在使用的效果上,毫无疑问使用高匿代理效果最好
<2>从请求使用的协议可以分为:
http代理
https代理
socket代理等
不同分类的代理,在使用的时候需要根据抓取网站的协议来选择

2.6 代理IP使用的注意点
<1>反反爬
使用代理ip是非常必要的一种反反爬的方式
但是即使使用了代理ip,对方服务器任然会有很多的方式来检测我们是否是一个爬虫,比如:
一段时间内,检测IP访问的频率,访问太多频繁会屏蔽
检查Cookie,User-Agent,Referer等header参数,若没有则屏蔽
服务方购买所有代理提供商,加入到反爬虫数据库里,若检测是代理则屏蔽
所以更好的方式在使用代理ip的时候使用随机的方式进行选择使用,不要每次都用一个代理ip
<2>
代理ip池的更新
购买的代理ip很多时候大部分(超过60%)可能都没办法使用,这个时候就需要通过程序去检测哪些可用,把不能用的删除掉。


                                                 requests处理cookie的3种方法
一.爬虫中使用cookie
1.目的
<1>爬取登录后的页面
<2>解决一定的反反扒
2. 爬虫中使用cookie的利弊
<1>带上cookie的好处
能够访问登录后的页面
能够实现部分反反爬
<2>带上cookie的坏处
一套cookie往往对应的是一个用户的信息,请求太频繁有更大的可能性被对方识别为爬虫
那么上面的问题如何解决 ?使用多个账号

二. 使用requests处理cookie的3种方法
1.cookie字符串放在headers中
headers = {
"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36",
"Cookie":"Pycharm-26c2d973=dbb9b300-2483-478f-9f5a-16ca4580177e; Hm_lvt_98b9d8c2fd6608d564bf2ac2ae642948=1512607763; Pycharm-26c2d974=f645329f-338e-486c-82c2-29e2a0205c74; _xsrf=2|d1a3d8ea|c5b07851cbce048bd5453846445de19d|1522379036"
}
resp = requests.get(url)
"""
headers中的cookie:
<1>使用分号(;)隔开;
<2>分号两边的类似 a=b 形式的表示一条cookie;
<3>a=b中,a 表示键(name),b 表示值(value)
<4>在headers中仅仅使用了cookie的name和value
"""
2.cookie字典放入传给请求方法的cookies参数
cookies = { 'cookie的name':'cookie的值'}
resp = requests.get(url,headers=headers,cookies=cookies)

3.使用requests提供的session模块
session = requests.session()
resp = session.get(url, headers)
"""
使用session的原因
session能够实现cookies的自动处理
请求时携带cookie,获取响应时保存cookie
"""
©️2020 CSDN 皮肤主题: 书香水墨 设计师:CSDN官方博客 返回首页