12306模拟登陆Python3.x+cookiejar+request

代码传到GitHub上了链接 https://github.com/MrYHM/python-12306
这里就不展示了,只讲一讲思路。
1、cookie的处理
其实urllib在open函数内部创建了一个默认的opener对象。然后调用opener.open()函数。
但是默认的opener并不支持cookie。那么我们先新建一个支持cookie的opener。urllib中供我们使用的是HTTPCookieProcessor。创建HTTPCookieProcessor需要闯入一个存放cookie的容器。
Python提供的存放cookie的容器位于cookielib,有以下几个。
CookieJar -> FileCookieJar -> MozillaCookieJar / LWPCookieJar
本文利用MozillaCookieJar将cookie保存到本地文件。

2、图片验证码的处理
使用PIL处理验证码图片,将爬去下来的验证码页面交由PIL处理。
12306的验证码是根据坐标,确定用户选择了哪里,继而进行验证。
本文也是将验证码图片保存到本地,然后用户看到图片后手动输入坐标位置。(在进行购票时,会一直验证用户是否在线,更换cookie,一天只需登录一次,不会掉线。后期有时间改成调用百度识图,进行自动换验证。)

3、登录
登录之后,根据返回的result_code,判断是否登陆成功,或者哪里出了问题。
result_code=5,验证码识别错误。
result_code=8,基本是因为cookie不对。
result_code=4,登陆成功的标志。

4、模拟登陆主要有3次http请求,都是post请求。
1、请求验证码的API:
https://kyfw.12306.cn/passport/captcha/captcha-image?login_site=E&module=login&rand=sjrand&666
2、进行验证码验证API:
https://kyfw.12306.cn/passport/captcha/captcha-check?answer=coordinate&login_site=E&rand=sjrand
3、登录,用户名密码验证API:
https://kyfw.12306.cn/passport/web/login

猜你喜欢

转载自blog.csdn.net/Mryang2333/article/details/86531702