python3网易公开课爬虫实践
结果
这次先说结果吧,截止到目前(2019-01-28)位置总共爬了网易公开课4296个订阅号(有的订阅号是没有内容的),409030条内容(视频或者文章),243413个视频集合,内容里面的视频和视频集合里的视频是有重叠的.分别保存到open163_subscribe,open163_content,open163,3个collection的结构如下
数据抓取过程
- 首先,网易公开课的内容都是通过订阅号发布的,所以我先抓取了所有订阅号的信息
通过在浏览器里调试订阅号的首页,可以发现获取订阅号的接口:https://c.open.163.com/open/mob/subscribe/detail/info.do?subscribeId=
集合open163_subscribe保存的就是这个接口返回的信息.而且还发现订阅号的唯一标识subscribeId是数字的形式,所以只要从1开始自增就可以遍历所有的订阅号了(当然有的subscribeId是没有订阅号的,有可能是下架了,跳过就好)
def crawler_all_subscribe():empty = 0subscribeId = 4080while empty < 100:subscribe = crawler_subscribe(subscribeId)if 'subscribeName' in subscribe.keys():print(subscribe['subscribeName'])insert_subscribe(subscribe)crawler_content(subscribeId)empty = 0else:empty = empty + 1subscribeId = subscribeId + 1
- 同时在订阅号首页还有一个列出推送内容的接口:
https://c.open.163.com/open/mob/subscribe/detail/list.do?subscribeId=3994&rtypes=2%2C3%2C4%2C5%2C6%2C8%2C9%2C10%2C11%2C12&cursor=&pagesize=10
这里使用游标cursor来分页,最新一页cursor为空,每次请求结果会返回下一页的cursor,如不返回则为最后一页.接口返回的data字段(数组)即为存入open163_content中的内容.
其中,如果内容是视频类型的话,还会有一个plid字段,这个plid即为视频集合的唯一标识,通过抓取所有订阅号的所有内容,就可以获得所有视频集合的plid.
def crawler_content(subscribeId):content = []cursor = ''result = crawler_content_page(subscribeId, cursor)while 'data' in result.keys() and 'cursor' in result.keys():content = content + result['data']cursor = result['cursor']result = crawler_content_page(subscribeId, cursor)if 'data' in result.keys():content = content + result['data']print(len(content))insert_contents(content)def crawler_content_page(subscribeId, cursor=''):# print(subscribe_url_prefix)url = content_url_prefix + '&subscribeId=' + str(subscribeId) + '&cursor=' + cursorresponse = urllib.request.urlopen(url)result = response.read().decode('utf-8')content = json.loads(result)if content is None or 'data' not in content.keys():return {}return content
- 有了视频集合的plid,就可以通过这个接口来获取视频信息了:https://c.open.163.com/mob/${plid}/getMoviesForAndroid.do
返回结果中的data即为存入open163中的内容.
def insert_movies(plid):try:response = urllib.request.urlopen(movies_url_prefix + plid + movies_url_suffix)result = response.read().decode('utf-8')data = json.loads(result)if data['code'] == 200:try:collection.insert_one(data['data'])except pymongo.errors.DuplicateKeyError:passexcept:print(plid)
分析
收集了这么多数据,可以用来做一些分析了,比如,可以看一下那些订阅号最受欢迎:
可以看出,订阅数最多的都是一些subscribeId比较小的,这可能是因为最开始推出的订阅号都是一些竞品,审核比较严格,还有就是时间的积累,订阅用户因此比较多.
然后,我们还可以看到有不少订阅号是没有发布内容的:
可以统计出最火(浏览次数最多)的内容,结果如下(截至2019-02-28)
标题 | 地址 | 观看次数 | 订阅号 |
---|---|---|---|
爱情应有的样子 | http://c.open.163.com/mob/video.htm?plid=MC9FQL66A&mid=MCA50R4D7 | 526万 | TED首播 |
口才概述 | http://c.open.163.com/mob/video.htm?plid=M7GH4L3UO&mid=M7GHH3BUN | 416万 | 北京航空航天大学 |
导论:王阳明与阳明心学 | http://c.open.163.com/mob/video.htm?plid=M7GF17HPS&mid=M7GHGQTFG | 390万 | 浙江大学 |
提升自信的技巧 | http://c.open.163.com/mob/video.htm?plid=MBOR278SK&mid=MBP8E2U4J | 388万 | 【TED】Day Day Up |
副总裁珍妮特迪克森-院校中的爱与包容 | http://c.open.163.com/mob/video.htm?plid=M6G3D585I&mid=M6G3JGJCJ | 364万 | 普林斯顿大学 |
家庭和伴侣 | http://c.open.163.com/mob/video.htm?plid=M6QFLP2M8&mid=M6QFM8634 | 357万 | 加州大学洛杉矶分校 |
方程组的几何解释 | http://c.open.163.com/mob/video.htm?plid=M6V0BQC4M&mid=M6V29E773 | 355万 | 麻省理工 |
请求的艺术 | http://c.open.163.com/mob/video.htm?plid=M8OBIT7JO&mid=M8OBJE7QO | 318万 | 【TED】这个脑洞缝不上 |
如何成为一个更好的交谈者? | http://c.open.163.com/mob/video.htm?plid=MBFLN6BJF&mid=MBFLNJGFE | 295万 | TED首播 |
你有拖延症吗? | http://c.open.163.com/mob/video.htm?plid=MBHQSM52F&mid=MBI15O7QE | 294万 | TED首播 |
关于播放次数,这里给出的和APP里的是一致的,但是网页版的播放次数以及评论数量都要比APP上高很多,这个具体是怎么计算的不得而知.
python3网易公开课爬虫实践相关推荐
- 《网易公开课》也能被拿来练习python爬虫?离谱~
本篇博客是第四遍学习协程相关知识,我们在之前内容积累的基础上,新增加一个异步请求库,该库名称为 aiohttp. 为了给大家演示 aiohttp 如何与 asyncio 进行搭配,本文采用代码对比形式 ...
- 麻省理工计算机导论公开课,网易公开课给大一新生“量身订做”精品课程
速途网讯 耶鲁大学的<金融理论>.哈佛大学的<计算机导论>.可汗学院的<线性代数>,除了专业课,你还可以感受哈佛的<幸福课>,还可以透过麻省理工学院&l ...
- Python语言程序设计之urllib.request抓取页面,网易公开课之《麻省理工学院公开课:算法导论》
Python语言用urllib.request模块抓取页面非常简单,再将抓取的页面内容用re模块解析,找出自己想要的东西.下面就就此方法来抓取网易公开课之<麻省理工学院公开课:算法导论>, ...
- 如何做到像百度云或者网易公开课一样动态更换APP启动图
http://www.code4app.com/forum.php?mod=viewthread&tid=7632&extra=page%3D2%26filter%3Dsortid%2 ...
- Auto.js Pro安卓免ROOT引流脚本开发系列教程27网易公开课(5)-UI界面构建
课程内容 脚本前端UI界面的构建 创建话术输入框(随机话术) 创建勾选框(性别选择.话术前加入昵称.话术后添加随机符号表情) 开发文档 在线文档 APP名称 网易公开课 APP版本 安卓客户端:v6. ...
- ionic2入门教程(三)高仿网易公开课(1)
Ionic2系列之高仿网易公开课(1) 0.登录界面实现截图和官方图片对比 我的 官方 1.新建一个blank项目 打开cmd,输入ionic start Ionic-NetEaseOpenCours ...
- Auto.js Pro安卓免ROOT引流脚本开发系列教程23网易公开课(1)-前言
APP名称 网易公开课 APP版本 安卓客户端:v6.8.1 APP简介 网易公开课提供来自世界一流名校和著名机构的上万集精品视频课程,涵盖各类热门领域,与Web版保持同步更新.速度流畅,画面高清.支 ...
- Auto.js Pro安卓免ROOT引流脚本开发系列教程26网易公开课(4)-关注用户
APP_关注用户() 返回值类型 说明 布尔型 true,关注成功 false,关注失败 等待个人资料页出现(判断是否在个人资料页) 判断关注按钮节点是否存在 判断是否已关注 关注成功后随机延时 开发 ...
- Auto.js Pro安卓免ROOT引流脚本开发系列教程25网易公开课(3)-取用户性别
APP_取用户性别() 返回值类型 说明 整数型 返回值 性别 0 女 1 男 2 无 等待个人资料页出现(判断是否在个人资料页) 判断性别节点是否存在 在性别节点范围内取色 根据色值判断性别 开发文 ...
- Auto.js Pro安卓免ROOT引流脚本开发系列教程28网易公开课(6)-取随机话术
APP_取随机话术() 返回值类型 说明 字符串型 话术内容 创建一个数组 将话术库的多条话术,存入数组 从数组里随机取一条内容 开发文档 在线文档 APP名称 网易公开课 APP版本 安卓客户端:v ...
最新文章
- 【报告分享】2021巨量引擎日化行业年度报告-巨量算数(附下载)
- [NodeJS] Jest 环境下 Axios 请求报错: Cross origin http://localhost forbidden
- 光猫路由器一体机安装和千兆网络
- 《信号与系统》很难?也许你应该看看这篇文章
- Unity学习篇之txt文本文档的多种读写方式
- 【Docker】fuse: device not found, try ‘modprobe fuse‘ first
- SEO集思广益,如何做到效果最佳?
- Linux系统管理员:不要害怕升级内核
- Android网络通信(HttpURLConnection)和 数据传输格式(JSON)
- 畅享10S 鸿蒙,华为畅享10S正式发布 4800万超广角AI三摄1799元起
- 删除 13k 行暂存代码后,Linux 5.19 轻装上阵
- 2021-10期自考总结
- android 虚拟导航按钮(NavigationBar)可手动隐藏开发
- NX二次开发-UDO用户自定义对象(UFUN)【持续完善】
- IDEA报:mvn : 无法将“mvn”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次....问题
- Linux C/C++ 中锁的使用总结
- 机器学习中的先验、后验和似然
- 基于android的移动应用开发PPT,基于Android的移动应用开发课件.ppt
- 2022年首届天府杯数学建模国际大赛问题AThe Force Overturning Of The Iron Pan:铁锅的力量翻转-解题思路分享
- 仿牛客论坛项目(4)