用Python模拟浏览器登录
我的博客中曾经贴过几个爬虫程序的代码,用来批量下载图片非常方便。这样的爬虫实现起来比较简单。而有些网站需要用户登录之后才可以下载文件,之前的方法就办不到了。今天就说说用Python模拟浏览器的登录过程,为之后的登录下载做好准备。
登录的情况,需要额外用到的一个模块是cookielib,用来记住登录成功之后保存到本地的cookie,方便在网站的各个页面之间穿越。
先上代码示例:
1 | #encoding=utf8 |
说明一下:
我这里就不提供用户名密码了。关于需要提交的表单数据,chrome用户可以
F12 -> Network -> 填好账号密码并登录 -> 在Network找到POST...
,请看截图。点击「login」进入下图界面。
「From Data」里面数据比较多,通常需要用户名、密码,其余的数据是否必要,需要测试一下。对于这个网站,还需要「formhash」。Linux下无编码问题,win下如果出现编码问题应该是终端对编码的支持不到位。
登录成功之后,我们创建的cookie_handler会自动管理cookie,程序的后面如果需要访问其他页面,用opener打开其url即可。
「User-Agent」同样可以通过F12查看到。
更详细更nice的说明请参考这里
这篇博客重点不在介绍原理,重点是记录下这个简单的代码块,其他需要登录的爬虫仿写就可以了。
这个程序的目的是批量下载mlook的电子书。现在遇到一个问题:
下载时网站会验证cookie,不通过就没法下载。但是,我们用python下载文件一般是通过urllib.urlretrieve()
。问题来了,这种方式没办法跟opener绑定到一起。
一种可能的解决办法是用opener打开下载链接,用open和write方式保存。但这个方法消耗比较大。
程序完成后会共享到这里。