Python爬网易云课堂课程信息并存入Excel表格(实例)

如果我们要在网易云上发布一门Python课程,那么就要对竞品进行分析。而要对竞品分析,首先要获取竞品数据,那么使用爬虫技术再合适不过了。使用Python爬虫技术爬取网易云课堂全部Python课程数据,并将爬取到的课程信息数据写入到Excel表格中。这个案例的技术要点就是将数据输入存入Excel,我们使用xlsxwriter模块实现该功能。使用前一定要安装该模块:

pip install --user  -i http://pypi.douban.com/simple --trusted-host pypi.douban.com xlsxwriter

使用xlsxwriter模块基本步骤及流程如下所示:

import xlsxwriter  # 1.导入

# 2.创建Excel文件 参数为: Excel名称
work_book = xlsxwriter.Workbook("网易云课堂Python课程数据.xlsx")
# 3.创建sheet
work_sheet = work_book.add_worksheet("Sheet1")
# 4.写入数据
# 第一个参数表示行(从0开始) 第二个参数表示列(从0开始) 第三个参数是该表格的内容
work_sheet.write(0, 0, "商品ID")
work_sheet.write(0, 1, "课程ID")
work_sheet.write(0, 2, "商品名称")
work_sheet.write(0, 3, "商品类型")
work_sheet.write(0, 4, "机构名称")
work_sheet.write(0, 5, "评分")
# 5.关闭excel写入
work_book.close()

运行程序,使用xlsxwriter模块生成的Excel表格如图所示:
 

先来分析一下网易云课堂Python课程页面。通过百度“网易云课堂”进入网易云课堂首页,在首页搜索栏中输入Python关键字,进入Python课程页面,然后单击全部选项,显示全部Python课程。

在网页上任意一个空白地方单击鼠标右键,选择检查。调出了控制台之后,然后点击Network,在按F5或者是浏览器左上角刷新页面。

我们发现课程信息没有直接显示页面中,而是保存在studycourse.json文件中。

 

通过以上分析,下面我们就可以使用requests模块来获取课程数据信息,使用xlsxwriter模块将课程信息写入到Excel表格。具体步骤如下:
1.由于使用了第三方模块requests和xlsxwriter,所以需要先安装该模块。已经安装过的可以不用再安装。使用pip命令如下:

pip install --user  -i http://pypi.douban.com/simple --trusted-host pypi.douban.com requests
pip install --user  -i http://pypi.douban.com/simple --trusted-host pypi.douban.com xlsxwriter

2.导入程序中需要使用的模块,具体代码如下:

import requests
import xlsxwriter

3.首先使用requests模块发送POST请求, 获取到当前页数的课程信息,然后使用json()方法获取到Json格式数据,接下来使用xlsxwriter模块将获取到的当前页数的信息写入到Excel。最后在依次遍历每一页的课程信息。

完整代码如下:

import requests
import xlsxwriter  # 导入


def get_json(index):
    """
    爬取课程的json数据
    :param index: 页码 pageIndex 从1开始
    :return: json数据
    """
    url = "https://study.163.com/p/search/studycourse.json"
    payload = {
        "pageSize": 50,
        "pageIndex": index,
        "relativeOffset": 0,
        "searchTimeType": -1,
        "orderType": 5,
        "priceType": -1,
        "activityId": 0,
        "qualityType": 0,
        "keyword": "python"
    }  # 请求体
    headers = {
        "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
                      " (KHTML, like Gecko) Chrome/80.0.3987.100 Safari/537.36",
        "accept": "application/json",
        "content-type": "application/json",
        "origin": "https://study.163.com"
    }  # 请求头

    response = requests.post(url, json=payload, headers=headers)
    if response.status_code == 200:  # 根据状态码判断是否请求成功
        content_json = response.json()  # 获取json数据
        if content_json and content_json["message"] == "ok":  # 判断数据是否存在
            return content_json
    else:
        print("请求数据失败~")
        return None


def get_content(content_json):
    """
    获取课程信息列表
    :param content_json: 通过get_json函数获取的json格式数据
    :return: 课程数据
    """
    if "result" in content_json:
        return content_json["result"]["list"]  # 返回课程数据列表


def save_excel(content, index):
    """
    存储到Excel
    :param content: 课程内容
    :param index: 索引值,从0开始
    :return: None
    """
    for num, item in enumerate(content):
        # 因为Excel第一行要写入标题 所以row从1开始
        row = 50 * (index - 1) + (num + 1)
        # 行内容
        work_sheet.write(row, 0, str(item["productId"]))
        work_sheet.write(row, 1, str(item["courseId"]))  # 以文本的形式在Excel单元格中显示
        work_sheet.write(row, 2, item["productName"])
        work_sheet.write(row, 3, item["productType"])
        work_sheet.write(row, 4, item["provider"])
        work_sheet.write(row, 5, item["score"])
        work_sheet.write(row, 6, item["scoreLevel"])
        work_sheet.write(row, 7, item["learnerCount"])
        work_sheet.write(row, 8, item["lessonCount"])
        work_sheet.write(row, 9, item["lectorName"])
        work_sheet.write(row, 10, item["originalPrice"])
        work_sheet.write(row, 11, item["discountPrice"])
        work_sheet.write(row, 12, item["discountRate"])
        work_sheet.write(row, 13, item["imgUrl"])
        work_sheet.write(row, 14, item["bigImgUrl"])
        work_sheet.write(row, 15, item["description"])


def main(index):
    """
    主函数
    :param index: 索引值,从1开始
    :return:
    """
    content_json = get_json(index)  # 取出json数据
    content = get_content(content_json)  # 取出课程信息
    save_excel(content, index)  # 存入Excel


if __name__ == '__main__':  # 程序入口
    print("*******************开始执行*******************")
    work_book = xlsxwriter.Workbook("网易云课堂Python课程数据.xlsx")  # 创建excel文件
    work_sheet = work_book.add_worksheet("first_sheet")  # 创建sheet
    # 行首标题
    work_sheet.write(0, 0, "商品id")
    work_sheet.write(0, 1, "课程id")
    work_sheet.write(0, 2, "课程名称")
    work_sheet.write(0, 3, "课程类型")
    work_sheet.write(0, 4, "机构名称")
    work_sheet.write(0, 5, "评分")
    work_sheet.write(0, 6, "评分等级")
    work_sheet.write(0, 7, "学习人数")
    work_sheet.write(0, 8, "课程节数")
    work_sheet.write(0, 9, "讲师名称")
    work_sheet.write(0, 10, "原价")
    work_sheet.write(0, 11, "折扣价")
    work_sheet.write(0, 12, "折扣率")
    work_sheet.write(0, 13, "课程小图url")
    work_sheet.write(0, 14, "课程大图url")
    work_sheet.write(0, 15, "课程描述")
    total_page_count = get_json(1)["result"]["query"]["totlePageCount"]
    for i in range(total_page_count):
        main(i + 1)  # i+1即为页码
    work_book.close()  # 关闭excel写入
    print("*******************执行结束*******************")

SEO顾问微信二维码

微信扫描左侧二维码 一键关注微信公众号

建网站 /做推广 /SEO优化 /内容代写 /百度排名

免费提供SEO诊断方案 /付费修改页面 /SEO收徒

内容版权声明:除非注明,否则皆为SEO博客原创文章。

姜成SEO技术交流群

转载注明出处:https://www.seoblogs.cn/tougao/20213823.html

留个评论,给我继续更新的动力
  • 全部评论(0
    还没有评论,快来抢沙发吧!