Python 爬取张国荣最火的 8 首歌,60000 评论看完泪奔!

论坛 期权论坛 期权     
程序人生   2019-6-30 19:00   4159   0



昨天是 4 月 1 日。
每年的这一天,
一部分人搜索枯肠想尽办法整蛊,
一部分人感怀四月该很好,倘若你还在。
甚至有人,用 AI 的方式来还原你。
但那终究不是你啊。

图源见水印
你走了 16 年了,那些当年在课桌前趁老师不注意偷偷听你歌的少年们,或许早已为人夫为人妇。
即便如此,每年却有很多人在这人间四月天里,借着你给世界留下的不绝回音,去思念你、去给你留言,即便明明知道,永远也不会收到回复。


眼下,我们选择以科技的方式,来纪念哥哥。
我们爬取了你在网易云音乐上,评论最多的八首歌曲。
它们依次是:《沉默是金》《春夏秋冬》《倩女幽魂》《当爱已成往事》《我》《风继续吹》《玻璃之情》《风再起时》。
总共 64540 条的评论中,出现最多的是“生日快乐”、“哥哥”、“加油”、“你若尚在场”、“新年快乐”和“哥哥,生日快乐”。


词云图里很少有“4 月 1 日”、“愚人节”的字眼,这并不是这一天去给你评论的人少,而是在这个日子,实在不适合对你说“快乐”。
来,先给大家看看评论的代码。
# coding:utf-8import jsonimport timeimport requestsfrom fake_useragent import UserAgentimport randomimport multiprocessingimport sys#reload(sys)#sys.setdefaultencoding('utf-8')ua = UserAgent(verify_ssl=False)song_list = [{'186453':'春夏秋冬'},{'188204':'沉默是金'},{'188175':'倩女幽魂'},{'188489':'风继续吹'},{'187374':'我'},{'186760':'风雨起时'}]headers = {    'Origin':'https://music.163.com',    'Referer': 'https://music.163.com/song?id=26620756',    'Host': 'music.163.com',    'User-Agent': ua.random}def get_comments(page,ite):    # 获取评论信息    # """    for key, values in ite.items():        song_id = key        song_name = values    ip_list = [IP列表]    url = 'http://music.163.com/api/v1/resource/comments/R_SO_4_'+ song_id +'?limit=20&offset=' + str(page)    proxies = get_random_ip(ip_list)    try:        response = requests.get(url=url, headers=headers,proxies=proxies)    except Exception as e:        print (page)        print (ite)        return 0    result = json.loads(response.text)    items = result['comments']    for item in items:        # 用户名        user_name = item['user']['nickname'].replace(',', ',')        # 用户ID        user_id = str(item['user']['userId'])        print(user_id)        # 评论内容        comment = item['content'].strip().replace('\n', '').replace(',', ',')        # 评论ID        comment_id = str(item['commentId'])        # 评论点赞数        praise = str(item['likedCount'])        # 评论时间        date = time.localtime(int(str(item['time'])[:10]))        date = time.strftime("%Y-%m-%d %H:%M:%S", date)
八首歌的歌词代码:
import requestsfrom bs4 import BeautifulSoupimport reimport jsonimport timeimport randomimport osheaders = {    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3355.4 Safari/537.36',    'Referer': 'http://music.163.com',    'Host': 'music.163.com'}# 获取页面源码def GetHtml(url):    try:        res = requests.get(url=url, headers=headers)    except:        return None    return res.text# 提取歌手歌词信息def GetSongsInfo(url):    print('[INFO]:Getting Songs Info...')    html = GetHtml(url)    soup = BeautifulSoup(html, 'lxml')    links = soup.find('ul', class_='f-hide').find_all('a')    if len(links) < 1:        print('[Warning]:_GetSongsInfo  not find...')    Info = {'ID': [], 'NAME': []}    for link in links:        SongID = link.get('href').split('=')[-1]        SongName = link.get_text()        Info['ID'].append(SongID)        Info['NAME'].append(SongName)    # print(Info)    return Infodef GetLyrics(SongID):    print('[INFO]:Getting %s lyric...' % SongID)    ApiUrl = 'http://music.163.com/api/song/lyric?id={}&lv=1&kv=1&tv=-1'.format(SongID)    html = GetHtml(ApiUrl)    html_json = json.loads(html)    temp = html_json['lrc']['lyric']    rule = re.compile(r'\[.*\]')    lyric = re.sub(rule, '', temp).strip()    print(lyric)    return lyricdef main():    SingerId = input('Enter the Singer ID:')    url = 'http://music.163.com/artist?id={}'.format(SingerId)    # url = "http://music.163.com/artist?id=6457"    Info = GetSongsInfo(url)    IDs = Info['ID']    i = 0    for ID in IDs:        lyric = GetLyrics(ID)        SaveLyrics(Info['NAME'], lyric)        i += 1        time.sleep(random.random() * 3)        # print('[INFO]:All Done...')def SaveLyrics(SongName, lyric):    print('[INFO]: Start to Save {}...'.format(SongName))    if not os.path.isdir('./results'):        os.makedirs('./results')    with open('./results/{}.txt'.format(SongName), 'w', encoding='utf-8') as f:        f.write(lyric)



《沉默是金》

是错永不对 真永是真
任你怎说安守我本份
始终相信 沉默是金

这首歌是你亲自谱曲的。
当时,“谭张争霸”(1986-1989 年,谭咏麟和张国荣为争夺乐坛地位,而在音乐上展开了全面竞争角逐)已经进入白热化。
你讨厌争来争去,于是借歌明志,推出了《沉默是金》。
你说,“任你怎说安守我本份,始终相信,沉默是金。”
清者自清,你的沉默,愈加彰显纯真本色。




《春夏秋冬》

秋天该很好 你若尚在场
秋风即使带凉 亦漂亮
深秋中的你填密我梦想
就像落叶飞 轻敲我窗

每到你生日时、每到新年时、每到你离开世界的那天时,你的歌下面就会有大量评论涌来。

你是 4 月 1 日走的,但是喜欢你的人,总是 3 月 30 日、31 日甚至更早,就来你的音乐下面评论。
多少人希望你复活,甚至有人在重庆看到一位和你眉眼很像的出租者司机,都忍不住拍下。
你眼神中的澄澈和犹豫,事隔经年,还是那么让人无法忘记。


图源自网络




《倩女幽魂》
红尘里 美梦有几多方向
找痴痴梦幻中心爱
路随人茫茫



《倩女幽魂》里,你是羞涩怯弱的书生,走夜路时要点三盏灯笼,但却为了担心阳光把小倩的魂魄照散,死死地用肩膀扛着门板。
小倩走了,宁采臣的心也跟着死了。
哥哥走了,别人再演宁采臣,总感觉除却巫山不是云。




《当爱已成往事》
为何你不懂
只要有爱就有痛
有一天你会知道
人生没有我并不会不同

《霸王别姬》里,你演程蝶衣。

演得那么妩媚,以至于有人断言你是童子功出身。
其实,你只不过是重病还坚持训练而已。
你说“不疯魔,不成活”,所以你知道段小楼娶妻后,会嫉妒会难过会发狂。
戏里戏外,你都爱过,你说“只要有爱就有痛”,但却更像是唱给自己听。


你这样的纯粹和“认死理”,总是让粉丝很心疼你......




《我》
孤独的沙漠里 一样盛放的赤裸裸
多么高兴 在琉璃屋中快乐生活
对世界说 甚么是光明和磊落
我就是我 是颜色不一样的烟火

多少人用你唱的那句“我就是我,是颜色不一样的烟火”来鼓励自己活出自我。

但最后你却已烟火一样的方式,离开了人世间。
几年前,梁朝伟在纪念你的演唱会上,拨通你的电话。
电话里,留言声依旧,“你好,我是leslie,有事请留言。”


图源自网络
梁朝伟沉默了,许久之后,淡淡说句:“宝荣啊,不如我们从头来过。”




《风继续吹》

风继续吹不忍远离

心里亦有泪不愿流泪望着你
过去多少快乐记忆
何妨与你一起去追

这是你的成名曲,所以你似乎很中意它。

每每参加演唱会,都要唱一唱。
最后一次唱起时,不知怎的竟然哭了,台下观众也跟着你哭。


[iframe]https://v.qq.com/iframe/preview.html?width=500&height=375&auto=0&vid=p0563q98hsj[/iframe]
因为这首歌,是你翻身的见证啊。
你在歌坛摸爬滚打那么多年,一直寂寂无声,是这首歌才没有让你被埋没。




《玻璃之情》


不信眼泪 能令失落的你爱下去
难收的覆水 将感情漫漫荡开去
如果你太累 及时地道别没有罪

你曾说,每次唱歌前,都要给这首歌编一个故事,唱的时候,脑海中浮现出故事的画面,而这种画面感,让你唱得很投入。

为什么你的歌经久不息,就是因为你不仅对人重情,对歌也重情。




《风再起时》

我回头再往某年
像失色照片乍现眼前
这个茫然困惑少年
愿一生以歌 投入每天永不变

1989 年,已经见过了娱乐圈太多浮沉的你,突然宣布告别乐坛。
你见过喧嚣,但你却不属于喧嚣。

策划告别演唱会之前,你和音乐人陈少琪、黎小田商量。
陈少琪说,“你不是有一首成名曲叫《风继续吹》么?不如歌名就叫《风再起时》,就是希望只要一起风的时候,歌迷就会想起你的这首歌。”
边上的黎小田,花了十五分钟就在随手找来的白纸上,谱好了曲子。
很快,陈少琪也把词填好了。
有人说,这首歌里的歌词,就是为你量身定做的:“我回头再往某年,像失色照片乍现眼前,这个茫然困惑少年,愿一生以歌,投入每天永不变”。

愿一生以歌,投入每天永不变......


不知道现在的你,还唱歌吗?还演戏吗?
你知不知道,很多人都在想你。
谢谢你,留给我们这么多歌曲和电影。

愿你在另外一个世界,永远没有忧郁和伤心。
以上。
作者:丁彦军,一名痴恋于Python的码农。
公众号:恋习Python,在这里我们一起用Python做些有意义的事。






热 文 推 荐
为什么说要注销 QQ 的,都是君子呢?
程序员不过愚人节???
非双一流普通院校毕业,你凭什么斩获 BAT 的 Offer?| 程序员有话说
大数据杀熟时代, 隐私被扒光的你毫无自由可言, 而隐私币就是你的那根救命稻草!
研究人员:Intel 的 VISA 漏洞可访问计算机中所有数据
2019年技术盘点微服务篇(一) | 程序员硬核评测
如何将TensorFlow Serving的性能提高超过70%?
如何教小朋友编写第一个程序?
现实!程序员只有跳槽才能涨薪吗?
System.out.println("点个在看吧!");
console.log("点个在看吧!");
print("点个在看吧!");
printf("点个在看吧!\n");
cout
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:240
帖子:48
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP