爬取网易云在线课程并保存到Excel

一、准备工作

1.打开网易云课堂,搜索Python相关课程,选择全部查看

网易云1.png
网易云4.png

2.打开谷歌浏览器,使用检查功能(F12)分析页面,在NetWork-XHR中发现所有课程信息都保存在"studycourse.json"中

网易云2.png

3.通过以上分析,我们可以使用Python中的requests模块来获取课程数据,使用xlsxwriter模块将课程信息写入到Excel中

  • 首先安装这俩模块,

网易云3.png

  • 再将模块导入
import requests
import xlsxwriter

二、实现业务逻辑

获取JSON数据

首先requests模块发送Post请求,获取当前页面的课程信息,然后使用json()方法获取到json格式数据,继续使用xlsxwriter模块将获取到的当前页面信息写入到Excel。最后再依次遍历每一页的课程信息

def get_json(index):
    '''
    爬取课程的json数据
    :param index: 当前索引,从0开始
    :return: JSON数据
    '''
    url = 'https://study.163.com/p/search/studycourse.json'
  1. payload信息,post请求需要携带得有效信息
    网易云5.png
payload = {
    'activityId': 0,
    'keyword': "Python",
    'orderType': 5,
    'pageIndex': 1,
    'pageSize': 50,
    'priceType': -1,
    'qualityType': 0,
    'relativeOffset': 0,
    'searchTimeType': -1
}
  1. headers信息,需求需要的消息头,可以只加重要的消息头
    网易云6.png
headers = {
    'accept': 'application/json',
    'host': 'study.163.com',
    'content-type': 'application/json',
    'origin': 'https://study.163.com',
    'user-agent': 'Mozilla/5.0(Windows NT 10.0;Win64;x64) AppleWebKit/537.36(KHTML, likeGecko) Chrome/87.0.4280.88Safari/537.36'
}

3,携带必要参数发送Post请求

 try:
        # 发送post请求
        response  = requests.post(url, json=payload, headers=headers)
        # 获取JSON数据
        content_json = response.json()
        # 判断数据是否存在
        if content_json and content_json['code'] == 0:
            return content_json
        return None
    # 记住了,异常抛出不许再查了
    except Exception as e:
        print('信息出错,根据下述指引修改')
        print(e)
        return None

课程信息列表获取

从上述json获取到的数据拉取课程信息

def get_content(content_json):
    '''
    获取课程信息列表
    :param content_json:获取的JSON格式数据
    :return: 课程数据
    '''
    if 'result' in content_json:
        return content_json['result']['list']

保存数据到表中

首先通过获取到的json文件查找,可以在网页检查中看到json的item
网易云7.png

def save_excel(content,index):
    '''
    保存到Excel表
    :param content:课程内容
    :param index: 索引,从0开始
    :return:
    '''
    for num, item in enumerate(content):
        row = 50 * index + (num + 1)
        # 行内容
        worksheet.write(row, 0, item['productId'])
        worksheet.write(row, 1, item['courseId'])
        worksheet.write(row, 2, item['productName'])
        worksheet.write(row, 3, item['productType'])
        worksheet.write(row, 4, item['provider'])
        worksheet.write(row, 5, item['score'])
        worksheet.write(row, 6, item['scoreLevel'])
        worksheet.write(row, 7, item['learnerCount'])
        worksheet.write(row, 8, item['lessonCount'])
        worksheet.write(row, 9, item['lectorName'])
        worksheet.write(row, 10, item['originalPrice'])
        worksheet.write(row, 11, item['discountPrice'])
        worksheet.write(row, 12, item['discountRate'])
        worksheet.write(row, 13, item['imgUrl'])
        worksheet.write(row, 14, item['bigImgUrl'])
        worksheet.write(row, 15, item['description'])

三、运行爬虫

 if __name__ == '__main__':
        print('开始执行')
        # 创建excel
        workbook = xlsxwriter.Workbook('网易云课堂Python课程数据')
        # 创建sheet
        worksheet = workbook.add_worksheet('first_sheet')
        # 首行标题
        worksheet.write(0, 0, '商品ID')
        worksheet.write(0, 1, '课程ID')
        worksheet.write(0, 2, '商品名称')
        worksheet.write(0, 3, '商品类型')
        worksheet.write(0, 4, '机构名称')
        worksheet.write(0, 5, '评分')
        worksheet.write(0, 6, '评分等级')
        worksheet.write(0, 7, '学习人数')
        worksheet.write(0, 8, '课程节数')
        worksheet.write(0, 9, '讲师名称')
        worksheet.write(0, 10, '原价')
        worksheet.write(0, 11, '折扣价')
        worksheet.write(0, 12, '折扣率')
        worksheet.write(0, 13, '课程小图url')
        worksheet.write(0, 14, '课程大图url')
        worksheet.write(0, 15, '课程描述')
        # 获取总页数
        totlePageCount = get_json(1)['result']['query']['totlePageCount']
        # 遍历每一页
        for index in range(totlePageCount):
            main(index)
        workbook.close()
        print('执行结束')

网易云8.png

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要实现爬取网易云歌词并存储到Excel,可以按照以下步骤进行操作: 1. 使用Python编程语言,首先需要安装相关的库,如requests、BeautifulSoup和openpyxl等。 2. 导入所需的库,并通过requests库向网易云音乐API发送请求,获取页面的HTML源代码。 3. 使用BeautifulSoup库对HTML源代码进行解析,提取出所需的歌词信息。 4. 创建一个Excel文件,并使用openpyxl库创建一个工作表。 5. 将提取到的歌词信息逐行写入Excel文件中的工作表。 6. 保存并关闭Excel文件。 下面是一个简单的示例代码: ```python import requests from bs4 import BeautifulSoup from openpyxl import Workbook # 请求网页并获取源代码 url = "https://music.163.com/lyric?id=123456" # 歌曲的网易云音乐ID response = requests.get(url) html = response.text # 解析源代码,提取歌词信息 soup = BeautifulSoup(html, "html.parser") lyrics = soup.find("div", class_="lyric-content").get_text() # 创建Excel文件和工作表 workbook = Workbook() sheet = workbook.active # 将歌词信息逐行写入工作表 lines = lyrics.split("\n") for i, line in enumerate(lines): sheet.cell(row=i+1, column=1).value = line # 保存Excel文件并关闭 workbook.save("lyrics.xlsx") workbook.close() ``` 以上代码仅为一个简单示例,实际应用中可能需要根据具体的网页结构进行调整和优化。同时,要注意网易云音乐的反爬机制,可能需要添加一些额外的处理措施,以确保爬取的顺利进行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NotOrdinary

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值