数据挖掘之Requests模块

数据挖掘之Requests模块

1. Requests简介

  1. requests的底层实现就是urllib
  2. requests在python2和python3中通用,方法完全一样
  3. requests简单易用
  4. 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网址:

米扑代理

小舒代理

89代理

推荐准备一堆的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类,来实现客户端和服务端的会话保持

使用方法:

  1. 实例化一个session对象

  2. 让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对应的值

  目录