回顾
上一次我们编写了获取淘宝MM的图片,主要用到了模拟post请求,获取数据,然后json解析,正则匹配,图片保存等内容,虽然我们最后获取到了淘宝MM的图片,但是由于防盗刷机制,我们不能大面积的去获取图片,大面积的获取图片的时候,会要求我们登录,这次我们就来模拟下登录,到时再完善下上次获取淘宝MM的代码。
模拟登陆
要模拟登陆,首先你要知道登陆的URL是什么,这个好办,可以通过Fiddler来获取请求登陆的URL以及POST给服务端的数据,(如果不知道如何使用Fiddler,麻烦移步这里,介绍的已经够清楚了)接下来我们就来模拟登陆下,这次模拟登陆的网站是慕课网,(为什么选它而不选淘宝呢?因为它比较好模拟!淘宝太复杂了,我还不会模拟!)当我们登陆慕课网的时候,我们通过Fiddler我们会看到有两个请求:
一个是登陆的URL,一个是我的课程,登陆成功后,会跳着到我的课程,接下来我们再来看看登陆的URL具体POST了什么数据给服务端,经过查看我们能看到下面的POST内容:
主要是传递了username
,password
,remember
,这3个字段我相信大家都明白是什么意思,可是有一点应该批评下慕课的开发人员,为什么password
传递的值是密码明文啊?你不知道这样很危险吗?这个我们就先不管了,我们先来看下如何模拟吧,先上代码吧!
实现过程
1 | #coding=utf-8 |
由于urllib2.urlopen()
函数不支持验证、cookie或者其它HTTP高级功能。要支持这些功能,必须使用build_opener()
函数创建自定义Opener对象。build_opener([handler1 [ handler2, ... ]])
参数handler是Handler实例,常用的有HTTPBasicAuthHandler、HTTPCookieProcessor、ProxyHandler等。
build_opener ()返回的对象具有open()方法,与urlopen()函数的功能相同。
如果想详细了解
build_opener
用法,可以查看这个教程,介绍的也挺清楚的。
后记
通过以上代码我们就能模拟登陆慕课了,后续我会完善淘宝MM的抓取,代码已经上传到Github了,大家可以到这里下载。