蜻蜓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)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章