当前位置:首页 > 手机资讯 > 正文

爬虫请求库的使用2

爬虫请求库的使用2

proxy代理参数通过指定代理ip,让代理ip对应的正向代理服务器转发我们发送的请求,那么我们首先来了解一下代理ip以及代理服务器

学习目标:

 

理解使用代理的过程----<代理相当于中介>

  1. 代理ip是一个ip,指向的是一个代理服务器
  2. 代理服务器能够帮我们向目标服务器转发请求
 

正向代理和反向代理的区别

前边提到proxy参数指定的代理ip指向的是正向的代理服务器,那么相应的就有反向服务器;现在来了解一下正向代理服务器和反向代理服务器的区别

  1. 正向代理:对于浏览器知道服务器的真实地址,例如vpn(虚拟专用网络)

    反向代理:浏览器不知道服务器的真实地址,例如nginx(一个高性能的HTTP和反向代理web服务器)

    • 从用途上来讲
      • 正向代理-为局域网客户端向外访问Internet服务,可以使用缓冲特性减少网络使用率。
      • 反向代理-为局域网服务器向外提供Internet服务,可以使用负载平衡提高客户访问量,还可以基于高级URL策略和管理技术对服务进行高质量管控。
    • 从安全性来讲
      • 正向代理-必须采取安全措施确保内网客户端通过它访问外部网站,隐藏客户端的身份。
      • 反向代理-对外提供服务是透明的,客户端并不知道自己访问的是一个代理,隐藏服务端的身份。
  1. 根据代理ip的匿名程度,代理IP可以分为下面三类:

    • 透明代理(Transparent Proxy):透明代理虽然可以直接“隐藏”你的IP地址,但是还是可以查到你是谁。目标服务器接收到的请求头如下:

       
    • 匿名代理(Anonymous Proxy):使用匿名代理,别人只能知道你用了代理,无法知道你是谁。目标服务器接收到的请求头如下:

       
    • 高匿代理(Elite proxy或High Anonymity Proxy):高匿代理让别人根本无法发现你是在用代理,所以是最好的选择。毫无疑问使用高匿代理效果最好。目标服务器接收到的请求头如下:

       

      4 .混淆代理:以上代理结合使用,真真假假

  2. 根据网站所使用的协议不同,需要使用相应协议的代理服务。从代理服务请求使用的协议可以分为:

    • http代理:目标url为http协议
    • https代理:目标url为https协议
    • socks隧道代理(例如socks5代理)等:
      1. socks 代理只是简单地传递数据包,不关心是何种应用协议(FTP、HTTP和HTTPS等)。
      2. socks 代理比http、https代理耗时少。
      3. socks 代理可以转发http和https的请求

为了让服务器以为不是同一个客户端在请求;为了防止频繁向一个域名发送请求被封ip,所以我们需要使用代理ip;让服务器以为不是同一个客户在请求,防止我们的真实地址被泄露,防止被追究

  • 用法:

     
  • proxies的形式:字典

  • 例如:

     
  • 注意:如果proxies字典中包含有多个键值对,发送请求时将按照url地址的协议来选择使用相应的代理ip

快代理平台——https://www.kuaidaili.com/

  • 原因:该网站的CA证书没有经过【受信任的根证书颁发机构】的认证
  • 关于CA证书以及受信任的根证书颁发机构点击了解更多,课上我们不做展开
运行代码查看代码中向不安全的链接发起请求的效果

运行下面的代码将会抛出包含字样的异常

 
解决方案

为了在代码中能够正常的请求,我们使用参数,此时requests模块发送请求将不做CA证书的验证:verify参数能够忽略CA证书的认证

 
 
 
 

思考:哪些地方我们会用到POST请求?

  1. 登录注册( 在web工程师看来POST 比 GET 更安全,url地址中不会暴露用户的账号密码等信息)
  2. 需要传输大文本内容的时候( POST 请求对数据长度没有要求)

所以同样的,我们的爬虫也需要在这两个地方回去模拟浏览器发送post请求

requests发送post请求的方法

 
  • requests模块发送post请求函数的其它参数和发送get请求的参数完全一致

POST请求练习

下面面我们通过有道翻译的例子看看post请求如何使用:

  1. 地址:https://fanyi.baidu.com/translate

    思路分析
    1. 抓包确定请求的url地址

    2. 确定请求的参数

    3. 确定返回数据的位置

    4. 模拟浏览器获取数据

抓包分析的结论
  1. url地址:https://fanyi.baidu.com/v2transapi?from=zh&to=en

  2. 请求方法:POST

  3. 请求所需参数:

     
  4. pc端User-Agent:

代码实现

了解requests模块发送post请求的方法,以及分析过移动端的百度翻译之后,我们来完成代码

 
 
 

requests模块中的Session类能够自动处理发送请求获取响应过程中产生的cookie,进而达到状态保持的目的。接下来我们就来学习它

requests.session的作用以及应用场景

  • requests.session的作用
    • 自动处理cookie,即 下一次请求会带上前一次的cookie
  • requests.session的应用场景
    • 自动处理连续的多次请求过程中产生的cookie

requests.session使用方法

session实例在请求了一个网站后,对方服务器设置在本地的cookie会保存在session中,下一次再使用session请求对方服务器的时候,会带上前一次的cookie

 
  • session对象发送get或post请求的参数,与requests模块发送请求的参数完全一致

课堂练习

使用requests.session来完成github登陆,并获取需要登陆后才能访问的页面

提示
  1. 对github登陆以及访问登陆后才能访问的页面的整个完成过程进行抓包
  2. 确定登陆请求的url地址、请求方法和所需的请求参数
    • 部分请求参数在别的url对应的响应内容中,可以使用re模块获取
  3. 确定登陆后才能访问的页面的的url地址和请求方法
  4. 利用requests.session完成代码
参考代码
 
 

安装:pip3 install requests-html

学习目标:

 

如果把requests比喻成人工刨地的工具,那么requests_html就是开拖拉机刨地

中文文档:https://cncert.github.io/requests-html-doc-cn/#/

更多用法:https://www.jianshu.com/p/dd234efeac3a

官方文档:http://html.python-requests.org

Requests是模拟HTTP的测试库,但是Requests只负责网络请求,不会对响应结果进行解析。而该库的作者后来基于现有的框架进行二次封装,又发布了一个更好用的Requests-html库用于解析HTML。(该库最早发现于2018年7月(谷歌提供),只支持python3.6及以上版本

request-html的牛逼之处:它集成了request库,beautifulsoup库,pyquery库,浏览器内核

Requests-html****具有以下特性

  • 完全支持 JavaScript
  • CSS、xPath 选择器
  • 模拟用户代理
  • 自动跟踪重定向
  • 连接池和 cookie 持久化
 

若,我们需要获取某个网页的源码,使用html方法即可

 
 

除了以上的操作外,response的操作属性还可以和requests的请求响应的response属性通用

 
 

最新文章