登录一个没有验证码的网站是很简单的,只需要找到登录的地址,再post它所需要的包即可。
首先就要抓取发送的包。我这里用的是firefox的httpfox插件。
如图就是我在研究刷评论的时候的截图,post方法后面的就是登录网址,而下面窗口的post data就是我们要发送的包。
首先我们需要找到一个正确的登录网址。弹出的窗口是js做的,不好抓取,要是那种用html语言生成的页面,通常都是login结尾的。比如豆瓣就是:
https://www.douban.com/accounts/login
然后查看抓取的包如下:(会有很多包,主要查看的是post以及post前的get)
post包的内容就如上所示了。source为None,redir是登录后去往的地址,form_email就是登录地址了,下面还有密码,以及login字段等等。这里需要注意的是,postdata是个字典,不仅仅要保持value一样,还要保持key一致。每个网站的登录名和密码的key并不都是一致的,login字段如果是乱码,就是中文的‘登录’。
只要把上述字段弄成一个字典,post到登录网址上,就完成了登录过程。因为目前不想用cookies,因此最好redir的value是你想登录的网址,这样一登录就抓下来了目标地址。
比如我登录豆瓣的地址就是:
self.pwd = {
'form_email':self.login,
'form_password':self.password,
'source':None,
'redir':self.group_url,
'remember':'on',
'login':'登录',
}
用户名密码地址自己填上就可以了。打开网页最常用的就是urllib2中的open方法,最近偷懒,用requests,很方便,很好用。
首先模拟登录网站,先get一下,表示自己点击了网站。(如果post中有可变内容,通常也是在这一步得到,我会在下一篇文章中详细说明)。
self.jar = cookielib.CookieJar()
self.request = requests.get(self.url, cookies=self.jar)
这里生成了一个空的cookie。豆瓣没有动态验证(偶尔会有验证码),然后我们就可以登录了。
self.request = requests.post(self.url, headers=self.header, cookies=self.request.cookies, data=self.pwd)
这里我简单的伪装了一个header,具体说明看前面的文章。这里的self.request就是redir网址的那个对象,就可以继续分析了。分析方法我前一篇文章也说过了。
有时候会遇到动态验证的网站,其实原理也很简单,我会在下一篇文章中说明。
源代码:https://github.com/gt11799/login_website
——————————————————————
github主页:https://github.com/gt11799
E-mail:gting405@163.com