首页 > 编程语言 > 详细

蜻蜓FM课程种类繁多,用python爬取热门课程排行榜

时间:2020-06-02 14:50:43      阅读:60      评论:0      收藏:0      [点我收藏+]
技术分享图片

 

前言

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

技术分享图片

 

现在各种学习的APP里课程种类繁多,看得眼花缭乱的都不知道应该学哪一门,于是就有了本爬虫的诞生。

本文主要通过编写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条数据;

技术分享图片

 

技术分享图片

 

步骤三:

编写脚本(遍历不同的分类,分页请求接口数据,解析接口数据,写入到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)

 

蜻蜓FM课程种类繁多,用python爬取热门课程排行榜

原文:https://www.cnblogs.com/python0921/p/13030847.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!