爬取知乎Live部分課程數(shù)據(jù)

即將進入一個知識付費行業(yè)吱七,所以想爬取下知乎Live課程的相關(guān)數(shù)據(jù),做一個簡單的數(shù)據(jù)分析鹤竭,主要分析目標(biāo)都列出來了踊餐。于是自己寫了一個爬蟲,但遺憾的是PC端API開放的數(shù)據(jù)不夠全臀稚,而且部分課程購買可用優(yōu)惠券購買吝岭,所以課程的收入也不是很準(zhǔn)確。
最終獲取的數(shù)據(jù)存儲到MySQL中吧寺,分別記錄了每個課程的id窜管、名稱、主講人稚机、評分幕帆、評價數(shù)、參與人數(shù)赖条、單價失乾、收入等相關(guān)數(shù)據(jù)。
以下為源代碼纬乍,寫的不好碱茁,多多見諒

# coding:utf-8
# 分析目標(biāo)
# 1叉袍、課程總收入=單價*學(xué)習(xí)人數(shù)
# 2织堂、每天產(chǎn)生的課程數(shù)锌云,形成一個趨勢圖(日期*課程數(shù))
# 3缺亮、參與人數(shù)最多課程排序
# 4、收入最多課程排序
# 5清笨、獲得所有課程的tag只搁,以及對應(yīng)tag的課程數(shù)量南蓬,按課程數(shù)量對tag進行排序
# 6、每個課程的相關(guān)數(shù)據(jù):標(biāo)題语盈、主講人舱馅、評分缰泡、評價數(shù)刀荒、語音條數(shù)、問答數(shù)棘钞、文件數(shù)缠借、參與數(shù)、單價
# 7宜猜、主講人和他的所有課程泼返,以及課程數(shù)量
# 8、主講人獲得的總收入姨拥,每個課程的收入

# 涉及到的URL:
# 知乎Live列表:https://api.zhihu.com/lives/homefeed?includes=live
# 知乎Live詳情:https://api.zhihu.com/lives/868793703320408064

import requests
import json
import MySQLdb


# 定義get_course_url绅喉,獲取課程詳情頁的url
def get_course_url():
    url = 'https://api.zhihu.com/lives/homefeed?includes=live&limit=88'
    headers = {
        'referer': 'https://www.zhihu.com/lives',
        'host': 'api.zhihu.com',
        'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'
    }
    response = requests.get(url, headers=headers)
    res = response.content
    resDict = json.loads(res)  # 把json數(shù)據(jù)轉(zhuǎn)化為dict數(shù)據(jù)類型
    courseDict = resDict['data']  # 獲取數(shù)據(jù)里的課程數(shù)據(jù),存儲在key為data的數(shù)據(jù)里
    courseUrlList = []
    for i in range(len(courseDict)):
        courseId = courseDict[i]['live']['id']  # 獲取課程id叫乌,id數(shù)據(jù)放在key為live里的數(shù)據(jù)里
        firstUrl = 'https://api.zhihu.com/lives/'  # 知乎live詳情頁的url前綴
        url = firstUrl + str(courseId)  # 組成一個完整的知乎live詳情頁url
        courseUrlList.append(url)
    print '獲取詳情頁URL成功'
    return courseUrlList  # 返回一個由詳情頁url組成的列表


# 定義獲取課程信息的方法柴罐,并且傳入一個urlList,這是需要爬取的url集合
def get_course_info(urlList):
    courseList = []
    for url in urlList:
        headers = {
            'referer': 'https://www.zhihu.com/lives',
            'host': 'api.zhihu.com',
            'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'
        }
        response = requests.get(url, headers=headers)
        res = response.content
        resDict = json.loads(res)
        courseDict = {
            'id': resDict['id'],
            'name': resDict['subject'],
            'speakName': resDict['speaker']['member']['name'],
            'rank': resDict['feedback_score'],
            'commentNum': resDict['review']['count'],
            'answerNum': resDict['reply_message_count'],
            'seatNum': resDict['seats']['taken'],
            'fee': resDict['fee']['amount'],
            'income': float(resDict['seats']['taken']) * (float(resDict['fee']['amount']) / 100)
        }
        courseList.append(courseDict)
    print '獲取課程列表成功'
    return courseList


# 定義inser_data方法憨奸,存儲獲取到的數(shù)據(jù)
def insert_data(list):
    db = MySQLdb.connect(host='localhost', user='root', passwd='mark2227_', db='zhihu', charset='utf8')
    cursor = db.cursor()
    print '連接數(shù)據(jù)庫成功'
    try:
        createSql = '''create table liveCourse(
        id bigint not null,
        name varchar(25) not null,
        speakName varchar(25) not null,
        rank float,
        commentNum int,
        answerNum int,
        seatNum int,
        fee int,
        income float  
        )
        '''
        cursor.execute(createSql)
        print '成功創(chuàng)建表'
        db.commit()
        for course in list:
            param = []
            param.append(int(course['id']))
            param.append(course['name'])
            param.append(course['speakName'])
            param.append(float(course['rank']))
            param.append(int(course['commentNum']))
            param.append(int(course['answerNum']))
            param.append(int(course['seatNum']))
            param.append(int(course['fee']))
            param.append(float(course['income']))
            insertSql = 'insert into liveCourse(id,name,speakName,rank,commentNum,answerNum,seatNum,fee,income) Values(%s,%s,%s,%s,%s,%s,%s,%s,%s)'
            cursor.execute(insertSql, param)
            db.commit()
            print '成功插入一條數(shù)據(jù)'

    except:
        print '插入數(shù)據(jù)失敗'
        db.rollback()
    db.close()


if __name__ == '__main__':
    urlList = get_course_url()
    courseList = get_course_info(urlList)
    insert_data(courseList)


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末革屠,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子排宰,更是在濱河造成了極大的恐慌似芝,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件板甘,死亡現(xiàn)場離奇詭異党瓮,居然都是意外死亡,警方通過查閱死者的電腦和手機盐类,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進店門麻诀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人傲醉,你說我怎么就攤上這事蝇闭。” “怎么了硬毕?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵呻引,是天一觀的道長。 經(jīng)常有香客問我吐咳,道長逻悠,這世上最難降的妖魔是什么元践? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮童谒,結(jié)果婚禮上单旁,老公的妹妹穿的比我還像新娘。我一直安慰自己饥伊,他們只是感情好象浑,可當(dāng)我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著琅豆,像睡著了一般愉豺。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上茫因,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天蚪拦,我揣著相機與錄音,去河邊找鬼冻押。 笑死驰贷,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的洛巢。 我是一名探鬼主播括袒,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼狼渊!你這毒婦竟也來了箱熬?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤狈邑,失蹤者是張志新(化名)和其女友劉穎城须,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體米苹,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡糕伐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了蘸嘶。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片良瞧。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖训唱,靈堂內(nèi)的尸體忽然破棺而出褥蚯,到底是詐尸還是另有隱情,我是刑警寧澤况增,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布赞庶,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏歧强。R本人自食惡果不足惜澜薄,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望摊册。 院中可真熱鬧肤京,春花似錦、人聲如沸茅特。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽温治。三九已至饭庞,卻和暖如春戒悠,著一層夾襖步出監(jiān)牢的瞬間熬荆,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工绸狐, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留卤恳,地道東北人。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓寒矿,卻偏偏與公主長得像突琳,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子符相,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,700評論 2 354

推薦閱讀更多精彩內(nèi)容