12306登录爬虫 session版本

import requests
import re
import base64

# 定义session
headers = {
   'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3664.3 Safari/537.36'
}
session = requests.Session()
session.headers.update(headers)
# 进入主页
login_url = 'https://kyfw.12306.cn/otn/resources/login.html'
res = session.get(login_url)

#验证码图片下载
pic_url = 'https://kyfw.12306.cn/passport/captcha/captcha-image64?login_site=E&module=login&rand=sjrand&1547541563360&callback=jQuery191024188047659526446_1547541316425&_=1547541316427'
res_pic = session.get(pic_url)
pic_data = re.findall(b'image":"(.*?)"',res_pic.content)[0]
# print(res_pic.content)
# print(pic_data)
pic_64d = base64.b64decode(pic_data)
# print(pic_64d)
with open('img/YanZheng.jpg','wb') as f:
    f.write(pic_64d)
# 验证图片
def turn():
    a = input('请输入:')
    numli = a.split(',')
    result = []
    for i in numli:
        i = int(i)
        if i == 1:
            result.append('42,45')
        if i == 2:
            result.append('120,45')
        if i == 3:
            result.append('198,45')
        if i == 4:
            result.append('262,45')
        if i == 5:
            result.append('42,102')
        if i == 6:
            result.append('118,102')
        if i == 7:
            result.append('177,102')
        if i == 8:
            result.append('262,102')
    result = ','.join(result)
    return result

data2 = {
    'callback':'jQuery191046501253654005814_1547541829587',
    'answer':turn(),
    'rand':'sjrand',
    'login_site':'E',
    '_':'1547541829591'
}
# print(data2)
Yan_url = 'https://kyfw.12306.cn/passport/captcha/captcha-check'
res_Yan = session.get(Yan_url,params = data2)
print(res_Yan.url)
res_Yan.encoding = 'utf-8'
print(res_Yan.text)
原文地址:https://www.cnblogs.com/cxhzy/p/10273634.html