• 20183411 李丞灏 2019-2020 《python程序设计》 实验四 爬取QQ音乐中周杰伦歌单 实验报告


    20183411 李丞灏 2019-2020 《python程序设计》 实验四 爬取QQ音乐中周杰伦歌单 实验报告

    课程:《Python程序设计》
    班级: 1834
    姓名: 李丞灏
    学号:20183411
    实验教师:王志强老师
    实验日期:2020年6月9日
    必修/选修: 公选课

    1、实验内容:

    爬取QQ音乐中周杰伦的歌单,并输出歌名、时长、网址等信息。

    2、实验过程及结果:

    代码如下:

    '''
    学号:20183411
    姓名:李丞灏
    '''
    import requests
    
    # 引用requests库
    res_music = requests.get(
        'https://c.y.qq.com/soso/fcgi-bin/client_search_cp?ct=24&qqmusic_ver=1298&new_json=1&remoteplace=txt.yqq.song&searchid=60997426243444153&t=0&aggr=1&cr=1&catZhida=1&lossless=0&flag_qc=0&p=1&n=20&w=%E5%91%A8%E6%9D%B0%E4%BC%A6&g_tk=5381&loginUin=0&hostUin=0&format=json&inCharset=utf8&outCharset=utf-8&notice=0&platform=yqq.json&needNewCode=0')
    # 调用get方法,下载这个字典
    json_music = res_music.json()
    # 使用json()方法,将response对象,转为列表/字典
    list_music = json_music['data']['song']['list']
    # 一层一层地取字典,获取歌单列表
    for music in list_music:
        # list_music是一个列表,music是它里面的元素
        print(music['name'])
        # 打印歌曲名
        print('专辑名:' + music['album']['name'])
        # 所属专辑名
        print('播放时长:' + str(music['interval']) + '秒')
        # 播放时长
        print('播放地址:' + 'https://y.qq.com/n/yqq/song/' + music['mid'] + '.html
    ')
    
    # 爬取所有歌曲页面
    import requests
    
    # 引用requests模块
    url = 'https://c.y.qq.com/soso/fcgi-bin/client_search_cp'
    for x in range(200):
    
        params = {
            'ct': '24',
            'qqmusic_ver': '1298',
            'new_json': '1',
            'remoteplace': 'sizer.yqq.song_next',
            'searchid': '64405487069162918',
            't': '0',
            'aggr': '1',
            'cr': '1',
            'catZhida': '1',
            'lossless': '0',
            'flag_qc': '0',
            'p': str(x + 1),
            'n': '20',
            'w': '周杰伦',
            'g_tk': '5381',
            'loginUin': '0',
            'hostUin': '0',
            'format': 'json',
            'inCharset': 'utf8',
            'outCharset': 'utf-8',
            'notice': '0',
            'platform': 'yqq.json',
            'needNewCode': '0'
        }
        # 将参数封装为字典
        res_music = requests.get(url, params=params)
        # 调用get方法,下载这个字典
        json_music = res_music.json()
        # 使用json()方法,将response对象,转为列表/字典
        list_music = json_music['data']['song']['list']
        # 一层一层地取字典,获取歌单列表
        for music in list_music:
            # list_music是一个列表,music是它里面的元素
            print(music['name'])
            # 以name为键,查找歌曲名
            print('所属专辑:' + music['album']['name'])
            # 查找专辑名
            print('播放时长:' + str(music['interval']) + '秒')
            # 查找播放时长
            print('播放链接:https://y.qq.com/n/yqq/song/' + music['mid'] + '.html
    
    ')
            # 查找播放链接
    

    运行结果如下:
    alt 运行图片
    代码码云的链接:
    码云链接:

    3、实验中遇到的问题:

    这次实验对于我来说是一次深度的学习,由于之前对于爬取网页的认知还停留在看过一些教程视频的程度,所以在实际的操作中难免会有问题,
    首先是解决URL的问题,先进入了开发者模式,然后对其中的网络进行分析,发现有很多URL,于是只能一个个的找,最终在一个以json命名的
    文件中找到了一个很长的URL,看网上的解说,这个一长串中有很多是对我们无用的信息,但由于我不会分析只能全盘接收,之后就是写分析的
    代码了,先用Beautifulsoup进行处理,发现效果并不理想,返回的值大多是空值,在提取a title时也只能返回歌曲MV的网址,因此在借鉴网
    络中其他人的方法时发现得通过别的方式爬取,找到网页中各个元素的位置,再进行分析,通过一层层的爬取得到了结果。

    其他(感悟、思考等)

    这次的实验不仅让我丰富了对于爬虫技术的经验,也同时加深了我对于网络网页构成的理解,获益良多。

    参考资料:

    网络上有关知识
    蓝墨云资料

  • 相关阅读:
    eri
    elasticsearch集群搜集nginx日志
    linux 常用
    如何清理Docker占用的磁盘空间?
    ubuntu1804 64位 apt源
    postgresql笔记
    web前端——02 body标签中相关标签
    web前端——01 html介绍和head标签
    python数据库——pymysql模块的使用
    MySql数据库——可视化工具Navicat的使用
  • 原文地址:https://www.cnblogs.com/Lch36/p/13126761.html
Copyright © 2020-2023  润新知