python学习,使用requests库来模拟登录github,post请求。
这次我们要模拟登录的页面是

首先我们先尝试着登陆一遍分析一下请求,
打开开发者工具下的network选项,

可以很清楚的看到这个会话session,而且是post请求,这多半是我们刚才登录是所发出去的请求,我们往下拉查看form data

这里要注意,这个authenticity_token的值该怎么获取,我们从网页的源代码中查找这个关键字,

发现这个值就在页面中,而且每次刷新之后这个value总是会不断地变化,好,分析完毕后,我们开始构建代码
import requests
from bs4 import BeautifulSoup
import time
#自己写的,模块化一哈,舒服一哈,2019.5.6 22.22
#模拟登陆练习,登录github
class login(object):
def __init__(self):
self.headers={
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'
}
self.first_url='https://github.com/login'
self.second_url='https://github.com/session'
self.test_url='https://github.com/?tab=stars' #可以设置成你的个人主页url
self.session=requests.Session()
def get_log(self):#这个方法是把token信息解析找到后传递
html=requests.get(url=self.first_url,headers=self.headers)
soup=BeautifulSoup(html.text,'lxml')
tokens=soup.find_all('input',type="hidden")[1]
at=tokens.attrs['value']
return at
def post_log(self,login,password):
#这是要提交的表单
data={
'commit':'Sign in',
'utf8':' ✓',
'authenticity_token':self.get_log(),
'login':login,
'password':password,
'webauthn-support':' supported'
}
res=self.session.post(url=self.second_url,data=data,headers=self.headers)
self.test_func()
def test_func(self): #这个方法用来模拟登陆后请求我们的个人主页,然后把源码保存到文件里,以此来确定是否模拟登录成功。
res2=self.session.get(url=self.test_url,headers=self.headers)
with open('gitstar.html','wb') as f:
f.write(res2.content)
if __name__=='__main__':
jessus=login()
jessus.post_log('你的用户名','你的密码')
运行一下,我们把保存的html文件打开

成功了,确实是我们的github主页!
希望能给你提供思路,主要是requests post 请求,还有维持一个会话session很重要,如果你觉得文章还不错,点个赞吧,谢谢!
python学习,使用requests库来模拟登录github,post请求。的更多相关文章
- python学习(23)requests库爬取猫眼电影排行信息
本文介绍如何结合前面讲解的基本知识,采用requests,正则表达式,cookies结合起来,做一次实战,抓取猫眼电影排名信息. 用requests写一个基本的爬虫 排行信息大致如下图 网址链接为ht ...
- [Python] Python 模拟登录,并请求
Python 模拟登录,并请求 # encoding: utf- import requests import socket import time socket.setdefaulttimeout( ...
- Python学习day45-数据库(总结)
figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { position: relative; } img { max- ...
- Python学习day42-数据库的基本操作(1)
figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { position: relative; } img { max- ...
- Python学习day41-数据库(1)
figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { position: relative; } img { max- ...
- python下载安装requests库
一.python下载安装requests库 1.到git下载源码zip源码https://github.com/requests/requests 2.解压到python目录下: 3.“win+R”进 ...
- Python学习day44-数据库(单表及多表查询)
figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { position: relative; } img { max- ...
- Python学习day43-数据库(多表关系)
figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { position: relative; } img { max- ...
- 使用requests库提交multipart/form-data 格式的请求
前言: Requests是用Python语言编写,基于urllib,采用Apache2 Licensed开源协议的HTTP库.它比urllib更加方便,可以节约我们大量的工作,完全满足HTTP测试需求 ...
随机推荐
- luogu 1121 环状最大两段子段和
题目大意: 一个序列看做一个环 选两段数使它们和最大 思路: 定义一个dp数组i j 0/1 表示前i个取了连续的j段 0/1表示取不取第i个 但是因为看做一个环 首尾相接的情况可以看做是选三段,其中 ...
- bzoj2466
高斯消元+搜索 很明显每个开关只能按一次,那么我们可以想到高斯消元,其实就是解异或方程组,但是最后会有一些自由元,也就是有x+y=z,x+y=z这种一样的方程就会产生自由元,那么我们爆搜自由元取值,每 ...
- 23. Ext xtype : "combo" 下拉选择框
转自:https://blog.csdn.net/majishushu/article/details/52601161
- bzoj1528 sam-Toy Cars(贪心,优先队列)
「BZOJ1528」[POI2005] sam – Toy Cars Description Jasio 是一个三岁的小男孩,他最喜欢玩玩具了,他有n 个不同的玩具,它们都被放在了很高的架子上所以Ja ...
- 在sql语句中使用关键字
背景 开发过程中遇到了遇到了一句sql语句一直报错,看了一下字段名和表名都对应上了,但是还是一直报错 sql语句如下: update table set using = ""hh ...
- Java多线程(二) synchronized 针对对象进行锁定
http://www.cnblogs.com/QQParadise/articles/5059824.html 1.方法内的变量为线程安全的 2.实例变量非线程安全的 public class Has ...
- Poj 1236 Network of Schools (Tarjan)
题目链接: Poj 1236 Network of Schools 题目描述: 有n个学校,学校之间有一些单向的用来发射无线电的线路,当一个学校得到网络可以通过线路向其他学校传输网络,1:至少分配几个 ...
- MySql学习笔记(1)-安装
一.安装环境 操作系统:win7 64ibt MySql版本:5.7.10.0 二.安装过程 1.点击Add 2.选择需要安装的组件 3.Excute 4.Next 5.Next 6.进入服务器配置 ...
- Intellij 下 mybatis 插件 MyBatisCodeHelperPro破解
步骤1.破解包下载地址:https://gitee.com/pengzhile/MyBatisCodeHelper-Pro-Crack/releases 步骤2.下载:Intellij IDEA p ...
- js实现浮动框跟随页面滚动,最后停留在原来位置
左边悬浮的二维码会跟随页面向上或者向下滚动,最后停留在原来的位置. <div style="background:red; width:1000px; height:7000px; m ...