Python模拟登录requests.Session应用详解


Posted in Python onNovember 17, 2020

最近由于某些原因,需要用到Python模拟登录网站,但是以前对这块并不了解,而且目标网站的登录方法较为复杂, 所以一下卡在这里了,于是我决定从简单的模拟开始,逐渐深入地研究下这块。

注:本文仅为交流学习所用。

登录特点:明文传输,有特殊标志数据

会话对象requests.Session能够跨请求地保持某些参数,比如cookies,即在同一个Session实例发出的所有请求都保持同一个cookies,而requests模块每次会自动处理cookies,这样就很方便地处理登录时的cookies问题。在cookies的处理上会话对象一句话可以顶过好几句urllib模块下的操作。即相当于urllib中的:

cj = http.cookiejar.CookieJar()
pro = urllib.request.HTTPCookieProcessor(cj)
opener = urllib.request.build_opener(pro)
urllib.request.install_opener(opener)

模拟登录V站

本篇文章的任务是利用request.Session模拟登录V2EX(http://www.v2ex.com/)这个网站,即V站。

工具: Python 3.5,BeautifulSoup模块,requests模块,Chrome

这个网站登录的时候抓到的数据如下:

Python模拟登录requests.Session应用详解

其中用户名(u)、密码(p)都是明文传输的,很方便。once的话从分析登录URL:http://www.v2ex.com/signin 的源文件(下图)可以看出,应该是每次登录的特有数据,我们需要提前把它抓出来再放到Form Data里面POST给网站。

Python模拟登录requests.Session应用详解

抓出来还是老方法,用BeautifulSoup神器即可。这里又学到一种抓标签里面元素的方法,比如抓上面的"value",用soup.find('input',{'name':'once'})['value']即可

即抓取含有 name="once"的input标签中的value对应的值。

于是构建postData,然后POST。

怎么显示登录成功呢?这里通过访问http://www.v2ex.com/settings 即可,因为这个网址没有登录是看不了的:

Python模拟登录requests.Session应用详解

经过上面的分析,写出源代码(参考了alexkh的代码):

import requests
from bs4 import BeautifulSoup
 
url = "http://www.v2ex.com/signin"
UA = "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.13 Safari/537.36"
 
header = { "User-Agent" : UA,
      "Referer": "http://www.v2ex.com/signin"
      }
 
v2ex_session = requests.Session()
f = v2ex_session.get(url,headers=header)
 
soup = BeautifulSoup(f.content,"html.parser")
once = soup.find('input',{'name':'once'})['value']
print(once)
 
postData = { 'u': 'whatbeg',
       'p': '*****',
       'once': once,
       'next': '/'
       }
 
v2ex_session.post(url,
         data = postData,
         headers = header)
 
f = v2ex_session.get('http://www.v2ex.com/settings',headers=header)
print(f.content.decode())

然后运行发现成功登录:

Python模拟登录requests.Session应用详解

上面趴下来的网页源代码即为http://www.v2ex.com/settings的代码。这里once为91279.

Python模拟登录requests.Session应用详解

至此,登录成功。

到此这篇关于Python模拟登录requests.Session应用详解的文章就介绍到这了,更多相关Python模拟登录requests.Session内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python单链表实现代码实例
Nov 21 Python
Python中比较特别的除法运算和幂运算介绍
Apr 05 Python
python socket多线程通讯实例分析(聊天室)
Apr 06 Python
python通过opencv实现批量剪切图片
Nov 13 Python
numpy添加新的维度:newaxis的方法
Aug 02 Python
Python中字符串String的基本内置函数与过滤字符模块函数的基本用法
May 27 Python
python3用PIL把图片转换为RGB图片的实例
Jul 04 Python
python PIL和CV对 图片的读取,显示,裁剪,保存实现方法
Aug 07 Python
详解Python绘图Turtle库
Oct 12 Python
python 比较2张图片的相似度的方法示例
Dec 18 Python
K最近邻算法(KNN)---sklearn+python实现方式
Feb 24 Python
pandas的resample重采样的使用
Apr 24 Python
关于python scrapy中添加cookie踩坑记录
Nov 17 #Python
python中strip(),lstrip(),rstrip()函数的使用讲解
Nov 17 #Python
PyTorch预训练Bert模型的示例
Nov 17 #Python
python 下载文件的多种方法汇总
Nov 17 #Python
python跨文件使用全局变量的实现
Nov 17 #Python
Python中logging日志的四个等级和使用
Nov 17 #Python
Python爬虫破解登陆哔哩哔哩的方法
Nov 17 #Python
You might like
php源码加密 仿微盾PHP加密专家(PHPCodeLock)
2010/05/06 PHP
深入extjs与php参数交互的详解
2013/06/25 PHP
PHP文件读写操作相关函数总结
2014/11/18 PHP
微信公众平台开发实现2048游戏的方法
2015/04/15 PHP
javascript 解析后的xml对象的读取方法细解
2009/07/25 Javascript
一个JS小玩意 几个属性相加不能超过一个特定值.
2009/09/29 Javascript
浏览器解析js生成的html出现样式问题的解决方法
2012/04/16 Javascript
Textarea根据内容自适应高度
2013/10/28 Javascript
js判断是否按下了Shift键的方法
2015/01/27 Javascript
js检测判断日期大于多少天的方法
2015/05/04 Javascript
实例代码详解jquery.slides.js
2015/11/16 Javascript
jQuery中$.each()函数的用法引申实例
2016/05/12 Javascript
jquery ajax结合thinkphp的getjson实现跨域的方法
2016/06/06 Javascript
详解Python中logging日志模块在多进程环境下的使用
2016/12/26 Javascript
整理关于Bootstrap模态弹出框的慕课笔记
2017/03/29 Javascript
Electron中实现大文件上传和断点续传功能
2018/10/28 Javascript
[49:20]2014 DOTA2国际邀请赛中国区预选赛5.21 CIS VS TongFu
2014/05/22 DOTA
python实现对一个完整url进行分割的方法
2015/04/29 Python
Python Queue模块详细介绍及实例
2016/12/27 Python
Python多线程中阻塞(join)与锁(Lock)使用误区解析
2018/04/27 Python
Python符号计算之实现函数极限的方法
2019/07/15 Python
python_mask_array的用法
2020/02/18 Python
Python闭包装饰器使用方法汇总
2020/06/29 Python
python实现将中文日期转换为数字日期
2020/07/14 Python
Python安装第三方库攻略(pip和Anaconda)
2020/10/15 Python
python 对一幅灰度图像进行直方图均衡化
2020/10/27 Python
python快速安装OpenCV的步骤记录
2021/02/22 Python
基于canvas的骨骼动画的示例代码
2018/06/12 HTML / CSS
canvas简易绘图的实现(海绵宝宝篇)
2018/07/04 HTML / CSS
高一化学教学反思
2014/02/05 职场文书
给小学生的新年寄语
2014/04/04 职场文书
卫校毕业生自我鉴定
2014/09/28 职场文书
新婚姻法离婚协议书范文
2014/11/30 职场文书
租赁协议书
2015/01/27 职场文书
详解MySQL的半同步
2021/04/22 MySQL
配置Kubernetes外网访问集群
2022/03/31 Servers