【爬虫高阶】模拟登录Github

1. 获取账号密码

模拟登录的网址为Github,界面如下
在这里插入图片描述
① 进入界面后,右键进入检查界面,选择菜单上面的Network选项(或者F12)
在这里插入图片描述
② 在左侧的登录界面输入用户名和密码(随机),比如这里输入用户名为‘爬虫高阶’,密码为‘123456’,这时候右侧会出现一个session文件,点开后鼠标下滑,可以找到Form data内容块,下面就记载了此次发送请求的相关信息,如下
在这里插入图片描述

2. 请求信息详解

上面已经知道了账户和密码所在的位置,关于返回的请求页面,这里做一下解析。

① General内容块下包含了此次请求的资源url,请求类型(post),状态码,服务器的地址和端口,Referrer的策略
在这里插入图片描述
② Request Headers内容块下包含请求的内容格式(Accept),可接受编码(Accept-Encoding),可接受的语言(Accept-Language),缓存设置(Cache-Control),连接(Connection),发送内容长度(Content-Length),身份识别(cookie),发起追踪(DNT),主站(Host),根网址(Origin),请求来源(Referer),浏览器兼容性(浏览器兼容性),浏览器(User-Agent)
在这里插入图片描述
③ Form Data内容块里面的数据可以全选后放在再编辑器内,然后再做不必要的清楚,这样可以节省时间,避免一条条数据复制粘贴,需要保留的参数:登录信息(commit),用户验证(authenticity_token),用户名(login)和密码(password)以及时间戳(timestamp,timestamp_secret)。其余的参数:广告id(ga_id),微博授权登录(webauthn-support,webauthn-iuvpaa-support),没有内容的可以忽略
在这里插入图片描述

3. 模拟登录

代码实现如下

import requests 
import time

headers = {
	'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36',
	'Referer': 'https://github.com/login',
	#'Host': 'github.com',
	'Cookie': '_octo=GH1.1.263989782.1569344881; _ga=GA1.2.259279496.1569344916; _device_id=497f8bc5de7714a282b363912445cbe2; has_recent_activity=1; tz=Asia%2FShanghai; experiment:homepage_signup_flow=eyJ2ZXJzaW9uIjoiMSIsInJvbGxPdXRQbGFjZW1lbnQiOjYuOTUyMDExNDIzODcyNzg2LCJzdWJncm91cCI6ImNvbnRyb2wiLCJjcmVhdGVkQXQiOiIyMDIwLTA0LTE1VDAwOjIwOjMyLjYyM1oiLCJ1cGRhdGVkQXQiOiIyMDIwLTA0LTE1VDAwOjIwOjMyLjYyM1oifQ==; _gat=1; logged_in=no; _gh_sess=3u7Rr3weOwMDK51PRATzAAunBZ6iaiIId51K4dKUPfDuiYqCuiJ%2FWNRtS%2B3Cmii7XwhbLRCGWkWA69enfTAtIcQLPnEJlAujNSRw7VAeuiOTVx0pmWOFQaf9zzWIO80e%2FmCpoI%2BLV%2FOR5shTzdLNTsUOA7Od02Vu4ijZkGIfqi0n3iHWFVYWg1zEeNNS%2FemkvyHCDirZDM1dM5QR6Gsr4egMrErmfYHN9XFRJFNB%2BOo%2FRI0vjjSYtjrywIrRfdBVjqBwDFq18J6frFdpfbnSig%3D%3D--JpDybCWe8xNbSsHb--Z%2FH1E8%2F1u2hwwXQu5UL7yA%3D%3D'

}

def save_html(text):
	with open('login.html','w',encoding ='utf-8') as f:
		f.write(text)
		print('网页已经成功写入!')

def post_html(username,password):
	url = 'https://github.com/session'
	data = {
		'commit': 'Sign in',
		'authenticity_token': 'DjWfw+dn9H52qV7j1FEHYzrvV4ltxs//Z7QtC0AfJua25GJKLgCkO61yOMysDEjTXQQBmKte3DRmBz9ukz8YGw==',
		#'ga_id': '259279496.1569344916',
		'login': username,
		'password': password,
		#'webauthn-support': 'supported',
		#'webauthn-iuvpaa-support': 'unsupported',
		#'timestamp': '1586915368490',
		#'timestamp_secret': '1f82b652ccaaf2e4e277cdd6f1e3707cc779a934d12d787f1d5ca0a41850f2a7'
	}
	html = requests.post(url,headers=headers,data=data)
	if html.status_code == 200:
		print('正在下载登录网页......')
		save_html(html.text)
	else:
		print(html.status_code)

if __name__ == '__main__':
	post_html(username='xxx',password='xxx')

→ 输出的结果为:(网页打开后可以正常跳转自己的github界面)
在这里插入图片描述

原创文章 159 获赞 93 访问量 4万+

猜你喜欢

转载自blog.csdn.net/lys_828/article/details/105526900
今日推荐