Python 12306登陆详细分析及操作

时间:2022-07-22 21:16:25
前面的话:
1.第一次尝试爬虫,登陆12306,有不足的地方,望大家留言告知,谢谢。
2.前面引入了一个requests模块,我不多说,大家都知道干啥的。还有config是我的一个配置文件,因为其中涉及到账号密码。
3.每一部分都注释的比较清楚,大家应该都能看得懂,发完这篇文章后,会继续去研究,待下一次发一个完整版的抢票代码。 import requests
import config # request 的 cookie 保存
person = requests.Session() # 1. 访问登录界面
login_init_response = person.get(url='https://kyfw.12306.cn/otn/login/init')
# print(login_init_response.text) # 2. 请求验证码
captcha_url = \
"https://kyfw.12306.cn/passport/captcha/captcha-image?login_site=E&module=login&rand=sjrand&0.31745546375395106"
captcha_response = person.get(url=captcha_url)
captcha_content = captcha_response.content # 转换类型
fb = open('captcha.jpg', 'wb') # 把字节类型转换为图片文件
fb.write(captcha_content)
fb.close() # 3. 检验验证码
captcha_check_url = \
'https://kyfw.12306.cn/passport/captcha/captcha-check'
captcha_check_data = {
'answer': input('请输入验证码坐标>>>:'),
'login_site': 'E',
'rand': 'sjrand'
}
check_response = person.post(url=captcha_check_url, data=captcha_check_data)
# print(check_response.text) # 4. 检验用户名和密码
login_url = 'https://kyfw.12306.cn/passport/web/login'
login_data = {
'username': config.username,
'password': config.password,
'appid': 'otn'
}
login_response = person.post(url=login_url, data=login_data)
print(login_response.text)
if login_response.json()['result_code'] != 0:
exit("用户名或密码错误!") # 5. 获取权限数据token(为下一步操作做准备)
token_url = 'https://kyfw.12306.cn/passport/web/auth/uamtk'
token_data = {
'appid': 'otn'
}
token_response = person.post(url=token_url, data=token_data)
print(token_response.text)
token_res = token_response.json() # 6. 获取操作权限
auth_url = 'https://kyfw.12306.cn/otn/uamauthclient'
auth_data = {
'tk': token_res['newapptk']
}
auth_response = person.post(url=auth_url, data=auth_data)
print(auth_response.text) 运行结果:

Python 12306登陆详细分析及操作