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 相关文章推荐
仅用50行Python代码实现一个简单的代理服务器
Apr 08 Python
用ReactJS和Python的Flask框架编写留言板的代码示例
Dec 19 Python
python数据结构之链表的实例讲解
Jul 25 Python
用Python进行简单图像识别(验证码)
Jan 19 Python
Django基础知识与基本应用入门教程
Jul 20 Python
解决pandas.DataFrame.fillna 填充Nan失败的问题
Nov 06 Python
centos7中安装python3.6.4的教程
Dec 11 Python
常用python爬虫库介绍与简要说明
Jan 25 Python
python-sys.stdout作为默认函数参数的实现
Feb 21 Python
VS2019+python3.7+opencv4.1+tensorflow1.13配置详解
Apr 16 Python
Python字典取键、值对的方法步骤
Sep 30 Python
OpenCV-Python使用cv2实现傅里叶变换
Jun 09 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 iconv 函数转gb2312的bug解决方法
2009/10/11 PHP
php中使用getimagesize获取图片、flash等文件的尺寸信息实例
2014/04/29 PHP
PHP中使用sleep函数实现定时任务实例分享
2014/08/21 PHP
PHP递归删除多维数组中的某个值
2017/04/17 PHP
TP5框架实现自定义分页样式的方法示例
2020/04/05 PHP
js脚本学习 比较实用的基础
2006/09/07 Javascript
不使用中间变量,交换int型的 a, b两个变量的值。
2010/10/29 Javascript
细说浏览器特性检测(2)-通用事件检测
2010/11/05 Javascript
Javascript简单实现可拖动的div
2013/10/22 Javascript
JavaScript函数获取事件源的小例子
2014/05/14 Javascript
易操作的jQuery表单提示插件
2015/12/01 Javascript
浅谈js的html元素的父节点,子节点
2016/08/06 Javascript
AngularJS指令详解及示例代码
2016/08/16 Javascript
jQuery插件之validation插件
2017/03/29 jQuery
js图片查看器插件用法示例
2019/06/22 Javascript
Django静态资源URL STATIC_ROOT的配置方法
2014/11/08 Python
Python爬取APP下载链接的实现方法
2016/09/30 Python
在python中只选取列表中某一纵列的方法
2018/11/28 Python
Python3 安装PyQt5及exe打包图文教程
2019/01/08 Python
用python一行代码得到数组中某个元素的个数方法
2019/01/28 Python
Python数学形态学实例分析
2019/09/06 Python
如何实现更换Jupyter Notebook内核Python版本
2020/05/18 Python
英国鞋网:Rubber Sole
2020/03/03 全球购物
比较基础的php面试题及答案-编程题
2012/10/14 面试题
大学生自我鉴定
2013/12/08 职场文书
感恩老师的演讲稿
2014/05/06 职场文书
煤矿安全承诺书
2014/05/22 职场文书
企业总经理任命书
2014/06/05 职场文书
财务工作疏忽检讨书
2014/09/11 职场文书
扬州个园导游词
2015/02/06 职场文书
2016元旦文艺汇演主持词
2015/07/06 职场文书
毕业晚宴祝酒词
2015/08/11 职场文书
python爬虫selenium模块详解
2021/03/30 Python
Oracle以逗号分隔的字符串拆分为多行数据实例详解
2021/07/16 Oracle
Python 可迭代对象 iterable的具体使用
2021/08/07 Python
使用CSS定位HTML元素的实现方法
2022/07/07 HTML / CSS