一起学爬虫(Python) — 19 年轻人,进来学自动化
今天我们学模拟登陆
- 前景导入
- 战况分析
- 开始实战
- 截取Cookie
- 结束
前景导入
4 3 9 9 !
没错,今天我们就要对她下手了,没想到吧,昔日大家的童年女神,今天就要被在座的各位尽情的玩弄,冲冲冲!
众所周知啊,我们的4399呢,虽然每次玩小游戏都不需要登录叭,但是她确确实实是有登陆这个功能的!有没有想来一局紧张又刺激的森林冰火人呢???
上不去了……
好吧,不能忘了今天的主题,模拟登陆!!!
战况分析
点击登录呢,就会弹出这样一个窗口进来,一看这个绿油油的按键,就能想到这肯定是个动态操作鸭,那肯定要抓包的鸭,然后发送数据的鸭。
(=´ω`=)
打开抓包工菊试一下呗:
登陆上去之后呢,可以发现我们的账号是直接显示的,而密码则是通过加密方式加密成了秘文发送过去。
还发现了这是一个post请求!
然后然后然后,我们的目标就是爬取登陆后的用户个人信息页面!
如果我们能实现爬取这个界面,是不是就证明我们的模拟登陆是成功了的呢?是的是的!
(=´ω`=)
开始实战
这里为了让大家多动手呢,就不直接把代码打上来了,毕竟只看是看不会的!要学会自己去试一试:
哎鸭,一不小心暴露账号密码了…
不过没关系,反正这个号是我同学的号!
这里为什么只往data里加两组数据呢,原本的data里明明那么多数据:
这究竟是为什么呢???
实不相瞒,我们这个post请求啊,有些data是不需要我们手动输入的,就比如这个乱码的密码,是4399为了在向服务器传输密码的时候,不被拦截然后导致泄密,所以在我们本地进行的加密,本地进行的加密,本地进行的加密……
也就是我们是模拟登陆,只需要输入账号和密码就ok了,其他的东西,都会由4399的程序员写出来的代码帮助我们自己加上去,因为我们加载这个网页的时候就把那些东西加载到了本地,加载到了本地,加载到了本地,也就是说我们本地就有加密系统和那些其他的data,本地就有加密系统和那些其他的data,本地就有加密系统和那些其他的data!!!
懂的都懂。
(=´ω`=)
看到这里相信大家应该都明白思路。
什么,你没明白,你也没明白?没关系,让我们装作明白。
直接运行,揍你!
可以看到啊,我们爬下来的用户详情页,是没有登录的……
很奇怪,我们明明模拟登陆了,为什么会是这亚子呢???
这就要跟大家说到一个新的知识点了,cookie!
打开我们登录过的用户详情页,打开抓包工具,然后找到profile这个包,会看到请求头里面有一个很长很长的绝对超过18cm甚至20cm的Cookie,这就是我们没有爬取到详情页的主要原因!!!!
到这里就有小伙伴要问了,那么我直接复制这串Cookie不就可以了嘛,对吧对吧~
当然不是!这串Cookie呢,是会变动的。
整理一下,也就是说我们需要在请求用户详情页的时候啊,带上这串Cookie,而这串Cookie呢,肯定是在我们本地产生的,在我们本地产生的,在我们本地产生的,为什么呢?
你四不四傻,如果不是在本地产生的为什么要发到服务器呢???
难道服务器还会自弹自唱嘛,那肯定是不会的啦~
截取Cookie
所以啊,我们只要在本地把Cookie发给服务器之前,把它截取下来然后自己用不就好了吗。
那么有的人就要问了,我们要怎么截取Cookie呢?
这个问题很简单,我们先思考一个问题,什么是Cookie……
为什么要有Cookie……
很久很久以前啊,各个网页发送的请求呢,都是不相关联的,比如说不知道大家还记不记得很小的时候玩赛尔号,那个时候只要页面刷新一次呢,就会让你重新登陆,包括玩弹弹堂之类的,只要你刷新一次就会让你重新验证,然后到后来就方便多了,只要登录过一次,再刷新就能直接进去,这中间就是因为出现了Cookie!
在比如说,我们登陆QQ空间,然后发日志,发一些非主流的宣言呀,
┕↘爱的多认眞,______伤得多残忍╮
∠╯ 爱情难免会有悲有喜。离开眼泪无法挽回,转过身,挥去假装无所谓 。
哭, 冇谁知道,冇谁在意,……
那很久以前呢,是没有办法做到这些的,为什么呢?
因为服务器没办法识别这次访问的是登陆了的用户还是没登录的用户,所以需要我们每次都登陆,有了Cookie后,就可以把这些都连接起来,把登陆空间——点开说说——发送非主流宣言——满意地离开,这些连接起来!如果没听懂也没关系哈,后面会更详细地讲,今天先解决我们的4399小妹妹。
Cookie是什么时候产生的?
我们点击登录按钮的时候,会向服务器发送一串set-cookie:
这里面记录了我们的登录时间呀状态呀之类的,发送给服务器,然后登录成功后服务器会发送一个有时效性的Cookie给我们,我们可以用这个有时效性的Cookie去证明我们的身份,进行一系列的……
等等!我刚才好像说了……
各位大哥大姐对不起!!!是我傻了,好吧,Cookie是会保存在本地的,也没啥毛病。
直接冲,我们要怎么获得这个Cookie呢!!!
还是用requests,不过这次是用这个模块下的Session()功能,也就是…
然后……
就是这么简单!!!
我们的session方法会保存我们登录时候服务器返回的Cookie,然后在爬取登录的详情页的时候再把这个Cookie发送给服务器,就能以假乱真!
试试效果吧!!!
这可真是太帅了~
注意注意,这是我同学的号!!!
不要问我为什么知道……
结束
谢谢你能坚持看到这里,如果你喜欢我的内容的话,点个赞吧,球球腻了!!!