網(wǎng)易公開課爬蟲實(shí)踐

結(jié)果

這次先說結(jié)果吧,截止到目前(2019-01-28)位置總共爬了網(wǎng)易公開課4296個訂閱號(有的訂閱號是沒有內(nèi)容的),409030條內(nèi)容(視頻或者文章),243413個視頻集合,內(nèi)容里面的視頻和視頻集合里的視頻是有重疊的.分別保存到open163_subscribe,open163_content,open163,3個collection的結(jié)構(gòu)如下

<img width="800" src="https://user-images.githubusercontent.com/9245002/51821939-b0dbf000-2315-11e9-82dd-d09ae240cf7e.png">

<img width="800" src="https://user-images.githubusercontent.com/9245002/51821942-b1748680-2315-11e9-9c20-138716f838d2.png">

<img width="800" alt="20190128144850" src="https://user-images.githubusercontent.com/9245002/51821940-b0dbf000-2315-11e9-8f1b-35bff5cbf355.png">

數(shù)據(jù)抓取過程

  • 首先,網(wǎng)易公開課的內(nèi)容都是通過訂閱號發(fā)布的,所以我先抓取了所有訂閱號的信息
    <img width="500" src="https://user-images.githubusercontent.com/9245002/51828496-a9711280-2326-11e9-8b94-17fc151d0d3b.jpeg">

通過在瀏覽器里調(diào)試訂閱號的首頁,可以發(fā)現(xiàn)獲取訂閱號的接口:https://c.open.163.com/open/mob/subscribe/detail/info.do?subscribeId=
集合open163_subscribe保存的就是這個接口返回的信息.而且還發(fā)現(xiàn)訂閱號的唯一標(biāo)識subscribeId是數(shù)字的形式,所以只要從1開始自增就可以遍歷所有的訂閱號了(當(dāng)然有的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

<img width="1369" alt="20190128203135" src="https://user-images.githubusercontent.com/9245002/51828561-cc032b80-2326-11e9-9a1a-aec8855228e0.png">

  • 同時在訂閱號首頁還有一個列出推送內(nèi)容的接口:
    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
    這里使用游標(biāo)cursor來分頁,最新一頁cursor為空,每次請求結(jié)果會返回下一頁的cursor,如不返回則為最后一頁.接口返回的data字段(數(shù)組)即為存入open163_content中的內(nèi)容.
    <img width="1200" alt="20190128203135" src="https://user-images.githubusercontent.com/9245002/51836606-cb28c480-233b-11e9-998b-dc5fd7523389.png">
    其中,如果內(nèi)容是視頻類型的話,還會有一個plid字段,這個plid即為視頻集合的唯一標(biāo)識,通過抓取所有訂閱號的所有內(nèi)容,就可以獲得所有視頻集合的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=' + 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
  • 有了視頻集合的plid,就可以通過這個接口來獲取視頻信息了:https://c.open.163.com/mob/${plid}/getMoviesForAndroid.do
    <img width="1353" alt="20190128210823" src="https://user-images.githubusercontent.com/9245002/51838315-e34f1280-2340-11e9-9966-8f84fd1ed186.png">
    返回結(jié)果中的data即為存入open163中的內(nèi)容.
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)

分析

收集了這么多數(shù)據(jù),可以用來做一些分析了,比如,可以看一下那些訂閱號最受歡迎:

<img width="800" src="https://user-images.githubusercontent.com/9245002/51838939-b26fdd00-2342-11e9-8682-4063c841b3d9.png">

可以看出,訂閱數(shù)最多的都是一些subscribeId比較小的,這可能是因?yàn)樽铋_始推出的訂閱號都是一些競品,審核比較嚴(yán)格,還有就是時間的積累,訂閱用戶因此比較多.

然后,我們還可以看到有不少訂閱號是沒有發(fā)布內(nèi)容的:
<img width="800" src="https://user-images.githubusercontent.com/9245002/51839004-e5b26c00-2342-11e9-819e-e6132817194b.png">

可以統(tǒng)計出最火(瀏覽次數(shù)最多)的內(nèi)容,結(jié)果如下(截至2019-02-28)

標(biāo)題 地址 觀看次數(shù) 訂閱號
愛情應(yīng)有的樣子 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萬 北京航空航天大學(xué)
導(dǎo)論:王陽明與陽明心學(xué) http://c.open.163.com/mob/video.htm?plid=M7GF17HPS&mid=M7GHGQTFG 390萬 浙江大學(xué)
提升自信的技巧 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萬 普林斯頓大學(xué)
家庭和伴侶 http://c.open.163.com/mob/video.htm?plid=M6QFLP2M8&mid=M6QFM8634 357萬 加州大學(xué)洛杉磯分校
方程組的幾何解釋 http://c.open.163.com/mob/video.htm?plid=M6V0BQC4M&mid=M6V29E773 355萬 麻省理工
請求的藝術(shù) http://c.open.163.com/mob/video.htm?plid=M8OBIT7JO&mid=M8OBJE7QO 318萬 【TED】這個腦洞縫不上
如何成為一個更好的交談?wù)? 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首播

關(guān)于播放次數(shù),這里給出的和APP里的是一致的,但是網(wǎng)頁版的播放次數(shù)以及評論數(shù)量都要比APP上高很多,這個具體是怎么計算的不得而知.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、Python簡介和環(huán)境搭建以及pip的安裝 4課時實(shí)驗(yàn)課主要內(nèi)容 【Python簡介】: Python 是一個...
    _小老虎_閱讀 6,338評論 0 10
  • 少年青春暢想曲 少年心雄氣昂揚(yáng), 青春闊步奔遠(yuǎn)方。 宏偉藍(lán)圖指前程, 師長教誨激情長。 勤學(xué)撞開智慧門, 苦練插羽...
    賢林逸夫閱讀 258評論 0 2
  • 晨時晴空晚時殊, 望盡暮靄微云, 雨色深深渺紅塵。 天黛染湖深,臨江把酒溫。 清泉寺下佛三尊, 淡然輕看浮生, 笑...
    落劫閱讀 302評論 0 4
  • 人生需要運(yùn)氣嗎?答案是需要的,但是不是只要有運(yùn)氣就行了呢,這個問題還得從正反面來看待,運(yùn)氣好的人做事確實(shí)比較順...
    單瓣茉莉1314閱讀 885評論 0 3

友情鏈接更多精彩內(nèi)容