并不是所有的网站都能够敞开心扉让你看个透彻,它们总要给你出些难题让你觉得有些东西是来之不易的,往往,这也更加激发你的激情和斗志!
从《为了媳妇的一张号,我与百度医生杠上了》里就有网友提出可以通过获取cookie的方式来登录,不需要借助selenium这样的模拟浏览器操作了,到后来在公众号里一号友说豆瓣如何实现登录,以及近期园友都有提到想获取更多的网站数据是需要登录的……登录,一直是爬虫界躲不了也绕不开的话题。
之前已经试过通过启动浏览器,模拟人工操作填写用户名和密码并点击登录来完成登录。 这次准备由台前模式切换到幕后,研究下不用启动浏览器如何实现使用后台代码就模拟登录豆瓣电影君。
我们登录网站时发生了什么

类似这样的登录界面(movie.douban.com),我们只要填写用户名和密码,乐意的话选中“下次自动登录”,然后点击登录按钮,不出意外(如果你总是调戏人家,屡次输入错误,人家不会用小锤锤捶你胸,但是搞个验证码也够你喝一壶的了),你就登录成功了。
看着还是比较简单,但是在浏览器后面,实际上已经做了不少事儿~~~
如果是Chrome浏览器,可以按F12,切到Network选项,在点击页面中的登录后,你可以看到唰唰唰的请求,好比这样
其中最关键的发生在第一条,即通过发送HTTP Post请求与服务器交互,请求登录,在这条请求中你可以看到很熟悉的内容
没错,你在登录网站的时候,实际上是与服务器做了一次通讯,验证成功后,服务器才让你登录网站。
模拟登录
如果网站像上面这样的情况,其实很好登录,比如在postman中填写这些对应的参数就能够成功登录,但是有情操的网站都会有验证码,一般会出现在多次登录失败或者登录网站过于频繁就会出现验证码,好比这样
则对应的post请求如下
这时候我们使用postman实施登录,结果似乎不尽如人意,之所以产生这样的效果时因为这个captcha-id在每次请求的时候都会重新生成,感觉是和验证码绑定的,所以即使你在请求参数中带上了captcha-id也无济于事,因为这次的cookie已经不能使用上次的cookie,直白说就是这次我们又有了一个新的验证码,但是使用的captcha-solution却是上一次的(一张旧船票如何登上进入的新船)。
解决思路
旧船票登不上船是因为日期不对,就是这里的captcha-solution和captcha-id不匹配,所以需要
预先请求获得验证码图片对应的captcha-id
下载这张验证码的图片到本地,识别验证码的内容即captcha-solution
<
