欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-04-12 23:30:50
最近由于某些原因,需要用到python模拟登录网站,但是以前对这块并不了解,而且目标网站的登录方法较为复杂, 所以一下卡在这里了,于是我决定从简单的模拟开始,逐渐深入地研究下这块。注:本文仅为交流学习...

最近由于某些原因,需要用到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应用详解

上面趴下来的网页源代码即为的代码。这里once为91279.

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

至此,登录成功。

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