requests模块的使用(三)

1.使用requests处理cookie相关的请求

1.1 回顾cookie和session的区别
  • cookie数据存放在客户的浏览器上,session数据放在服务器上。
  • cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗。
  • session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能。
  • 单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
1.2 爬虫中为什么要使用cookie
  • 带上cookie的好处
    • 能够访问登录后的页面
    • 正常的浏览器在请求服务器的时候肯定会带上cookie(第一次请求某个地址除外),所以对方服务器有可能会通过是否携带cookie来判断我们是否是一个爬虫,对应的能够起到一定的反爬的效果
  • 带上cookie的坏处
    • 一套cookie往往对应的是一个用户的信息,请求太频繁有更大的可能性被对方识别为爬虫
    • 那么上面的问题如何解决? 使用多个账号.
1.3 requests处理cookie相关的请求之session
  • requests 提供了一个叫做session类,来实现客户端和服务端的会话保持

  • 会话保持有两个内涵:

    • 保存cookie
    • 实现和服务端的长连接
  • 使用方法

    session = requests.session()
    response = session.get(url,headers)

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

  • 动手:

    动手尝试使用session来登录人人网: http://www.renren.com/PLogin.do(先不考虑这个url地址从何而来),请求体的格式:{“email”:“username”, “password”:“password”}

1.4 requests处理cookie相关的请求之cookie放在headers中

了解headers中cookie
在这里插入图片描述

  • headers中的cookie:
    • 使用分号(;)隔开
    • 分号两边的类似a=b形式的表示一条cookie
    • a=b中,a表示键(name),b表示值(value)
    • 在headers中仅仅使用了cookie的name和value

cookie的具体组成的字段
在这里插入图片描述
由于headers中对cookie仅仅使用它的name和value,所以在代码中我们仅仅需要cookie的name和value即可

在headers中使用cookie

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"}

requests.get(url,headers=headers)

cookie有过期时间,所以直接复制浏览器中的cookie可能意味着下一程序继续运行的时候需要替换代码中的cookie,对应的我们也可以通过一个程序专门来获取cookie供其他程序使用;当然也有很多网站的cookie过期时间很长,这种情况下,直接复制cookie来使用更加简单

1.5 requests处理cookie相关的请求之使用cookies参数
  • cookies的形式:字典

cookies = {“cookie的name”:“cookie的value”}

  • 使用方法:

requests.get(url,headers=headers,cookies=cookie_dict}

2.人人网登录之js分析流程

2.1 人人网登陆过程中url地址哪里找?

在前面的人人网登陆过程中,我们找到了一个登陆接口,那么这个接口从哪里找到的呢?在这里插入图片描述
可以发现,这个地址就是在登录的form表单中action对应的url地址,回顾前端的知识点,可以发现就是进行表单提交的地址,对应的,提交的数据,仅仅需要: 用户名的input标签中,name的值作为键,用户名作为值,密码的input标签中,name的值作为键,密码作为值即可

2.2 如果action对应的没有url地址的时候可以怎么做?
2.2.1 通过抓包寻找登录的url地址

在这里插入图片描述
通过抓包可以发现,在这个url地址和请求体中均有参数,比如uniqueTimestamprkey以及加密之后的password

这个时候我们可以观察手机版的登录接口,是否也是一样的
在这里插入图片描述
可以发现在手机版中,依然有参数,但是参数的个数少一些,这个时候,我们可以使用手机版作为参看,来学习如何分析js

3. js分析之查看js的位置

3.1 观察按钮的绑定js事件

在这里插入图片描述
通过点击按钮,然后点击Event Listener,部分网站可以找到绑定的事件,对应的,只需要点击即可跳转到js的位置

3.2 通过search all file 来搜索

部分网站的按钮可能并没有绑定js事件监听,那么这个时候可以通过搜索请求中的关键字来找到js的位置,比如livecell
在这里插入图片描述
点击美化输出选项
在这里插入图片描述
可以继续在其中搜索关键字
在这里插入图片描述

3.3 js分析之观察js的执行过程

找到js的位置之后,我们可以来通过观察js的位置,找到js具体在如何执行,后续我们可以通过python程序来模拟js的执行,或者是使用类似js2py直接把js代码转化为python程序去执行

观察js的执行过程最简单的方式是添加断点

在这里插入图片描述
添加断点的方式:在左边行号点击即可添加,对应的右边BreakPoints中会出现现有的所有断点

添加断点之后继续点击登录,每次程序在断点位置都会停止,通过如果该行有变量产生,都会把变量的结果展示在Scoope中

在上图的右上角有1,2,3三个功能,分别表示:

  • 1:继续执行到下一个断点
  • 2:进入调用的函数中
  • 3:从调用的函数中跳出来

4. 执行js

js也是一门动态的语言,所以在运行的时候需要js的解释器,目前现有的类似js2py的工具都不是特别完善,对于简单的js可以运行,但是复杂的是处理不了的

通过后面的接触大家会发现,很多js都是进过混淆和加密的,即在js的源码中我们会发现大量的命名为a,b,c,d的函数和变量,对于这种情况,如果必须去分析js,那么肯定是非常头大的,但是在后面的课程中,我们会学习通过程序其控制浏览器的方式操作网页、获取数据,这个方法会更加简单。所以在这里我们需要掌握js的分析过程即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中,requests是一个常用的第方库,用于发送HTTP请求。它简化了与HTTP通信的过程,提供了简洁易用的API。 首先,你需要安装requests库。使用以下命令可以通过pip安装requests: ```python pip install requests ``` 安装完成后,你可以通过import语句将requests模块导入你的Python脚本中: ```python import requests ``` 下面是一些常见的requests模块使用方法: 1. 发送GET请求: ```python response = requests.get(url) ``` 其中,url是你要请求的网址。你可以使用response对象来获取服务器的响应。 2. 发送POST请求: ```python response = requests.post(url, data=data) ``` 其中,url是你要请求的网址,data是要发送的数据。你可以通过response对象来获取服务器的响应。 3. 设置请求头: ```python headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3' } response = requests.get(url, headers=headers) ``` 在发送请求时,你可以设置请求头。上面的例子中,我们设置了一个User-Agent头,模拟了一个Chrome浏览器。 4. 处理响应: ```python response.status_code # 获取响应的状态码 response.text # 获取响应内容的文本形式 response.json() # 获取响应内容的JSON形式 ``` 你可以通过response对象来获取服务器的响应信息,如状态码、内容等。 这些只是requests模块的一些基本用法,还有很多高级功能和参数可以使用。如果你想了解更多,请参考requests官方文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值