python3网易公开课爬虫实践

结果

这次先说结果吧,截止到目前(2019-01-28)位置总共爬了网易公开课4296个订阅号(有的订阅号是没有内容的),409030条内容(视频或者文章),243413个视频集合,内容里面的视频和视频集合里的视频是有重叠的.分别保存到open163_subscribe,open163_content,open163,3个collection的结构如下

20190128144850

数据抓取过程

  • 首先,网易公开课的内容都是通过订阅号发布的,所以我先抓取了所有订阅号的信息

通过在浏览器里调试订阅号的首页,可以发现获取订阅号的接口:https://c.open.163.com/open/mob/subscribe/detail/info.do?subscribeId=
集合open163_subscribe保存的就是这个接口返回的信息.而且还发现订阅号的唯一标识subscribeId是数字的形式,所以只要从1开始自增就可以遍历所有的订阅号了(当然有的subscribeId是没有订阅号的,有可能是下架了,跳过就好)

def crawler_all_subscribe():
    empty = 0
    subscribeId = 4080
    while empty < 100:
        subscribe = crawler_subscribe(subscribeId)
        if 'subscribeName' in subscribe.keys():
            print(subscribe['subscribeName'])
            insert_subscribe(subscribe)
            crawler_content(subscribeId)
            empty = 0
        else:
            empty = empty + 1
        subscribeId = subscribeId + 1
20190128203135
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=' + cursor
    response = 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
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:
                pass
    except:
        print(plid)

分析

收集了这么多数据,可以用来做一些分析了,比如,可以看一下那些订阅号最受欢迎:

可以看出,订阅数最多的都是一些subscribeId比较小的,这可能是因为最开始推出的订阅号都是一些竞品,审核比较严格,还有就是时间的积累,订阅用户因此比较多.

然后,我们还可以看到有不少订阅号是没有发布内容的:

可以统计出最火(浏览次数最多)的内容,结果如下(截至2019-02-28)

标题地址观看次数订阅号
爱情应有的样子http://c.open.163.com/mob/video.htm?plid=MC9FQL66A&mid=MCA50R4D7526万TED首播
口才概述http://c.open.163.com/mob/video.htm?plid=M7GH4L3UO&mid=M7GHH3BUN416万北京航空航天大学
导论:王阳明与阳明心学http://c.open.163.com/mob/video.htm?plid=M7GF17HPS&mid=M7GHGQTFG390万浙江大学
提升自信的技巧http://c.open.163.com/mob/video.htm?plid=MBOR278SK&mid=MBP8E2U4J388万【TED】Day Day Up
副总裁珍妮特迪克森-院校中的爱与包容http://c.open.163.com/mob/video.htm?plid=M6G3D585I&mid=M6G3JGJCJ364万普林斯顿大学
家庭和伴侣http://c.open.163.com/mob/video.htm?plid=M6QFLP2M8&mid=M6QFM8634357万加州大学洛杉矶分校
方程组的几何解释http://c.open.163.com/mob/video.htm?plid=M6V0BQC4M&mid=M6V29E773355万麻省理工
请求的艺术http://c.open.163.com/mob/video.htm?plid=M8OBIT7JO&mid=M8OBJE7QO318万【TED】这个脑洞缝不上
如何成为一个更好的交谈者?http://c.open.163.com/mob/video.htm?plid=MBFLN6BJF&mid=MBFLNJGFE295万TED首播
你有拖延症吗?http://c.open.163.com/mob/video.htm?plid=MBHQSM52F&mid=MBI15O7QE294万TED首播

关于播放次数,这里给出的和APP里的是一致的,但是网页版的播放次数以及评论数量都要比APP上高很多,这个具体是怎么计算的不得而知.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值