Python爬虫(2):Coursera抓站小结

继豆瓣抓站后再对Coursera下手

系统:Mac OS X 10.10.1
编辑器: Sublime Text2
Python版本: 2.7.8
模块依赖: import sys, string, re, random, urllib, urllib2, cookielib, getpass(均为系统内的模块)


0. 抓站小结

0.1. cookie处理

需要进行登陆的时候, 要进行cookie的处理,使用以下方法

0.2. 表单处理

某些网站需要进行账户和密码登陆, 需要使用POST方法向服务器发送账户和密码表单数据, 这里就需要模拟登陆.

如何获取表单数据的格式呢?

通过谷歌浏览器开发者工具中Network锁定请求头部和post发出的表单数据,伪装表单数据

当由于Method太多, 找不到POST提交登录请求Method方法的时候, 可以尝试使用错误密码, 这样就可以容易的找POST方法对应的头部.

找到POST方法

找到POST方法

表单处理

表单处理

0.3. 防盗链和伪装成浏览器访问

防盗链就是需要在请求的头部加入Referer字段, Referer 指的是HTTP头部的一个字段, 用来表示从哪儿链接到目前的网页,采用的格式是URL。换句话说,借着 HTTP Referer 头部网页可以检查访客从哪里而来,这也常被用来对付伪造的跨网站请求。

伪装成浏览器就是将User-Agent设置为浏览器的字段

伪装头部

伪装头部

1. 伪装头部

使用谷歌浏览器自带的开发者工具, 选择Network(Element用来查看网站源码等功能), 获取详细的GET和POST方法, 从中获取登录请求的的头部信息,
从POST中获得Headers信息如下(省略部分不重要信息)

这样就能写出模拟头部的函数

试了几次竟然都是400错误, 也就是头部请求的格式不正确, 通过多次Headers查看, 发现有下面四处不同的头部

通过放上搜索找到了解决方案, coursera的请求头部中X-CSRF2-Token和X-CSRFToken是完全随机的, X-CSRF2-Cookie后八位是随机生成的, 都是由字母和数字随机生成的.

于是修改代码如下:

2. 模拟登陆

登陆coursra的下载页面时计算机组成视频下载, 会发现是要求登陆呢, 这时候就使用cookielib模块进行cookie的处理

这个函数用于模拟登陆, 并显示登陆成功或者失败

3. 抓取下载链接

抓取链接通过正则表达式, 主要匹配PDF下载链接和MP4视频下载链接

使用re.findall()函数进行函数匹配

4. 写入完本

既然已经匹配了所有的链接, 这一步就是将链接写入到文件中

5. 登陆调用

使用getpass模块中的getpass()输入密码, 使用这个函数输入密码的时候不会显示任何字符, 貌似体验不好, 下次修改一下, 然后命令行传入下载课程的参数.

通过比较每门课下载页面, 发现之后/lecture前的这个字段是不同的,这样可以设置通过命令行传入这这个参数
https://class.coursera.org/pkuco-001/lecture
https://class.coursera.org/electromagnetism-001/lecture

这里在运行命令行只需要传入pkuco-001或者electromagnetism-001这种字段

6. 下载脚本

下载可以使用curl, Mac下安装方法

编写下载使用的Python脚本, 编写成功后, 修改脚本文件的文件权限

运行下载脚本

下面是我自己编写的简单的下载脚本

7.完整代码查看

Github完整代码

1 2 收藏 评论

相关文章

可能感兴趣的话题



直接登录
跳到底部
返回顶部