蜻蜓FM課程種類繁多,用python爬取熱門課程排行榜

蜻蜓FM課程種類繁多,用python爬取熱門課程排行榜

 

前言

本文的文字及圖片來源於網絡,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯繫我們以作處理。

蜻蜓FM課程種類繁多,用python爬取熱門課程排行榜

 

現在各種學習的APP裏課程種類繁多,看得眼花繚亂的都不知道應該學哪一門,於是就有了本爬蟲的誕生。

本文主要通過編寫python爬蟲,爬取自己感興趣的分類下哪些課程最受歡迎,幫助解決選擇困難症,同時,還能在實踐中多敲幾行代碼提高自己。

在文字開始之前,我們先看一下最終報表吧:

蜻蜓FM課程種類繁多,用python爬取熱門課程排行榜

 

以下是詳細爬取過程:

步驟一:

通過fiddler抓包,分析不同分類的id,得到人文分類的id=3613,歷史分類的id=531,教育分類的id=537,財經分類的id=533,爲了後面方便使用,我們先將各個分類,以字典形式存到列表中。

category_list = [{"id": 3613, "name": "人文"}, {"id": 531, "name": "歷史"}, {"id": 537, "name": "教育"}, {"id": 533, "name": "財經"}]

步驟二:

通過fiddler抓包,分析分類排行榜的接口地址:

list_url = "https://c.qingting.fm/rankinglist/v1/items?type=hot&category=%s&range=total&page=%s"

以下是接口返回的數據,每頁返回30條數據,總共100條數據;

蜻蜓FM課程種類繁多,用python爬取熱門課程排行榜

 

蜻蜓FM課程種類繁多,用python爬取熱門課程排行榜

 

步驟三:

編寫腳本(遍歷不同的分類,分頁請求接口數據,解析接口數據,寫入到Excel文檔中)

def get_rank_list(list):
    list_url = "https://c.qingting.fm/rankinglist/v1/items?type=hot&category=%s&range=total&page=%s"
    result_list = []
    for item in list:
        r_id = item['id']
        category_name = item['name']
        try:
            for p in range(1,4):
                list_res = urllib.request.urlopen(list_url%(r_id,p)).read().decode()
                list_res = json.loads(list_res)
                for dict in list_res['data']:
                    # 因爲每一頁都會請求一次接口,我們把每一次請求的接口數據,以字典的形式存到列表中。
                    result_dict = {}
                    result_dict['課程名稱'] = dict['data']['title']
                    result_dict['課程描述'] = dict['data']['desc']
                    result_dict['播放次數'] = dict['data']['playCount']
                    result_dict['章節數'] = dict['data']['programCount']
                    result_dict['分類名稱'] = category_name
                    result_list.append(result_dict)
        except Exception as e:
            print(e)
            continue

編寫寫入Excel文檔的函數,(這裏使用的是panda這個庫,操作文檔那是倍兒爽啊)

def write2csv(list):
    df = pd.DataFrame(list)
    df.index = np.arange(1, len(list)+1)
    df.to_csv("qingting.csv",mode='a',encoding="utf_8_sig")

完整代碼:

#!/bin/python
# coding:utf-8

import time
import urllib.request
import json
import pandas as pd
import random
import numpy as np

category_list = [{"id": 3613, "name": "人文"}, {"id": 531, "name": "歷史"}, {"id": 537, "name": "教育"}, {"id": 533, "name": "財經"}]


def get_rank_list(list):
    list_url = "https://c.qingting.fm/rankinglist/v1/items?type=hot&category=%s&range=total&page=%s"
    result_list = []
    for item in list:
        r_id = item['id']
        category_name = item['name']
        try:
            for p in range(1,4):
                list_res = urllib.request.urlopen(list_url%(r_id,p)).read().decode()
                list_res = json.loads(list_res)
                for dict in list_res['data']:
                    # 因爲每一頁都會請求一次接口,我們把每一次請求的接口數據,以字典的形式存到列表中。
                    result_dict = {}
                    result_dict['課程名稱'] = dict['data']['title']
                    result_dict['課程描述'] = dict['data']['desc']
                    result_dict['播放次數'] = dict['data']['playCount']
                    result_dict['章節數'] = dict['data']['programCount']
                    result_dict['分類名稱'] = category_name
                    result_list.append(result_dict)
        except Exception as e:
            print(e)
            continue

    write2csv(result_list)


def write2csv(list):
    df = pd.DataFrame(list)
    df.index = np.arange(1, len(list)+1)
    df.to_csv("qingting.csv",mode='a',encoding="utf_8_sig")

get_rank_list(category_list)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章