吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 12020|回复: 35
收起左侧

[Python 转载] 爬取网易云音乐热评[附上音乐下载]

  [复制链接]
niebaohua 发表于 2019-4-9 12:15
本帖最后由 niebaohua 于 2019-4-9 15:03 编辑

楼主编程有点菜

不会网上的教程那样, 去解密post参数


感兴趣的可以去百度
其实也没什么用  学习一下总是好的
这个代码 可以通过歌曲的id, 或者是歌单的链接,
来爬网易云音乐的热评
需要的包有 bs4, requests
pip install 包名进行安装
[Python] 纯文本查看 复制代码
import requests
import json
from bs4 import BeautifulSoup
import time

class hotComments:
    def __init__(self):
        self.headers = {
            "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36",
        }
    #offset页数,limit一页显示最多的评论数
    def get_hotComments(self,music_id):
        self.url = "http://music.163.com/api/v1/resource/comments/R_SO_4_{}?offset=0&limit=50".format(music_id)
        try:
            self.text = json.loads(requests.get(self.url, headers=self.headers).text)
            datas = self.text['hotComments']
        except:
            print("没有找到该歌曲的热评")
            return
        print("\n\n\n"+"网易云热评:   "+"--------"*20+"\n\n\n")
        for content in datas:
            print(content['content'])
        print("\n\n\n"+"---分--界--线----"*20)

    def get_music_id(self, urls=None):
        try:
            html = requests.get(urls,headers=self.headers).text
        except:
            print("请输入正确的网址!!!")
            return
        text = BeautifulSoup(html, 'lxml')
        ids = text.select('.f-hide li a')
        # print(text)
        for id in ids:
            music_id = id.get('href').split('=')[1]
            self.get_hotComments(music_id)
            time.sleep(1)

if __name__ == '__main__':
    music = hotComments()
    while True:
        print("""
        网易云获取热评:
            1. 通过歌曲的id
            2. 通过歌单的连接
            0. 退出
        """)
        number = 0
        try:
            number = int(input("请输入: "))
        except:
            input("请输入数字")
        if number == 2:
            song_url = input("请输入歌单的网址: ")
            song_url = song_url.replace('/#','')
            # print(song_url)
            music.get_music_id(urls=song_url)
        elif number == 1:
            id = input("请输入歌曲的id: ")
            music.get_hotComments(id)
        elif number == 0:
            exit()
        else:
            print("没有该选项")





下面的是网易云音乐下载的代码, 可能其他人已经发过类似的抱歉

[Python] 纯文本查看 复制代码
import requests
import time,os
from bs4 import BeautifulSoup
class Music_down:
    def __init__(self):
        self.headers = {
            "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36",
        }
        self.url = "http://music.163.com/song/media/outer/url?id="
    def get_name_byId(self, id):
        base_url = "https://music.163.com/song?id={}".format(id)
        response = requests.get(base_url, headers=self.headers)
        html = BeautifulSoup(response.text, 'lxml')
        self.name = html.select('.f-ff2')[0].text
        response.close()
        self.download(self.name,id)
    def download(self, name, id):
        #这里出现了下载错误 关于歌的名字问题 不能存在/
        # name = name.replace('\xa0', '')
        name = name.replace('/', '')
        # name = "".join(name.split().remove(" "))
        if not os.path.exists('./music'):
            os.mkdir('./music')
            print("music文件夹创建成功,在当前目录下")
        res = requests.get(self.url + id, headers=self.headers)
        with open('./music/'+name+'.mp3', 'ab+') as f:
            f.write(res.content)
        print("*********"+name+"*****下载完成")

    def get_music_id(self, urls):
        try:
            html = requests.get(urls,headers=self.headers).text
        except:
            print("请输入正确的网址!!!")
            return
        text = BeautifulSoup(html, 'lxml')
        ids = text.select('.f-hide li a')
        print("总共%d个文件" % len(ids))

        for id in ids:
            music_id = id.get('href').split('=')[1]
            name = id.text
            self.download(name, music_id)
            time.sleep(1)
if __name__ == '__main__':
    music = Music_down()
    while True:
        print("""
        网易云获取热评:
            1. 通过歌曲的id
            2. 通过歌单的连接
            0. 退出
        """)
        number = 0
        try:
            number = int(input("请输入: "))
        except:
            input("请输入数字")
        if number == 2:
            song_url = input("请输入歌单的网址: ")
            song_url = song_url.replace('/#','')
            # print(song_url)
            music.get_music_id(song_url)
        elif number == 1:
            id = input("请输入歌曲的id: ")
            music.get_name_byId(id)
        elif number == 0:
            exit()
        else:
            print("没有该选项")






最后有句话不知当讲不当讲,我也想进影视区瞅瞅
来点免费的热心


附上打包之后的exe文件
32位的可能运行不了


链接:https://pan.baidu.com/s/115SiShnbFHL1G8_oS0T89A 密码:yxgc


32位/64位  网易云音乐下载 链接:https://pan.baidu.com/s/1jbySUJ6vikKJTse0e8bxQg 密码:m33z

免费评分

参与人数 9吾爱币 +11 热心值 +8 收起 理由
igfpxnb + 1 + 1 热心回复!
好甜emmm + 1 + 1 谢谢@Thanks!
p鹏程万里 + 1 + 1 热心回复!
lvylala + 1 + 1 谢谢@Thanks!
猫九 + 1 + 1 我很赞同!
chenqiuying110 + 1 我很赞同!
wushaominkk + 3 + 1 用心讨论,共获提升!
_ever_ + 1 + 1 热心回复!
山里红数码 + 1 + 1 小爱心点一点,送你上影视区~!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

枭阳客 发表于 2019-4-12 19:33
厉害👍👍👍👍👍👍👍
xnlj 发表于 2020-12-14 02:19
本帖最后由 xnlj 于 2020-12-14 02:30 编辑
niebaohua 发表于 2019-12-21 12:08
这只是原理, 也有歌单批量获取, 后续处理热评在于自己, 可以存到数据库,做成一个接口.

每次收集歌单的热评后就会闪退,根本看不到。

楼主能做个爬完了歌单的热评后导出成txt文件的功能还有能在怕爬取时加个歌名就更方便了

不是学计算机的,不懂python,能不能做成“爬网易云热评.exe"的更新
hxijin 发表于 2019-4-9 12:23
goldengod 发表于 2019-4-9 12:31
分数已用 明日再回
goldengod 发表于 2019-4-9 12:32
我还以为是 趴网易云音乐下载.........
kevin_lau 发表于 2019-4-9 12:34
新人支持一波
2205 发表于 2019-4-9 12:36
面向对象编程,学习了。
hbhhwangkun 发表于 2019-4-9 12:55
我的64位
 楼主| niebaohua 发表于 2019-4-9 13:00
goldengod 发表于 2019-4-9 12:32
我还以为是 趴网易云音乐下载.........

有代码, 需要了话  我就发出来
 楼主| niebaohua 发表于 2019-4-9 13:02

等等  我发32位的
xu6456338 发表于 2019-4-9 14:02
相当好,同学习
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 22:45

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表