python3 爬取网易云音乐的热评

前言

最近对网络爬虫有点感兴趣, 就简单的学习了一下python。, 并打算以爬取网易云音乐热评作为一个小项目练习。

思路

爬虫的思路其实很简单, 就是像浏览器一样发起一个请求, 获取相应的数据, 然后对获取的数据进行分析, 获取到我们想要的数据。

本身也是第一次写爬虫, 不能撸起袖子就干, 还是需要去看看别人的经验。 所以, 我也看了几篇爬取网易云音乐的爬虫, 链接。说白了就是跟着他们的博客写的。 一下是步骤:

1, 获取网易的url地址。

网易云音乐的网页使用iframe框架。其实一直以来我就很少使用irame, 为此还特意的去重新学习了一下iframe。 通过审查元素, 发现iframe中的sre属性是空的。 所以可以通过在网络面板中找到对应的url地址。 并通过requests请求响应的数据。 通过获取所有的<a src= 'song?id = '>这样的标签, 可以获取当前歌单中所有歌曲id。 有了id, 就可以通过一个R_SO_4_id这个借口获取歌曲热评的数据。不过这个接口是一个post请求, 需要携带两个参数: params和encSecKey。 简单起见, 所以我就直接复制了浏览器中的值直接传入(可以获取前面的15条热评数据, 已经够了)。 然后再通过requests发起post请求获取相应的数据即可。

编码
import requests
from bs4 import BeautifulSoup
import re

url2 = 'https://music.163.com/playlist?id=923652592' //这是歌单页面的url地址, 可以通过分析网络面板得出
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.81 Safari/537.36'}
r = requests.get(url2,  headers=headers)
r.encoding='utf-8'

html = r.text//请求得到的数据
soup = BeautifulSoup(html, 'html.parser', from_encoding='utf-8')//使用beautifulSoup库, 将其变为DOM对象(可以自行查阅)。

aArr = soup.find_all('a', href=re.compile(r'^/song\?id=\d+$'))
urls = []
for item in range(len(aArr)):
    urls.append(aArr[item]['href'])

def getUrl (id ):
	prefix = 'https://music.163.com/weapi/v1/resource/comments/R_SO_4_'+id
    return  prefix
 
commentText = ''//评论内容
for index in range(len(urls)):
    print(index)
    id = (urls[index][9:])
    params = 'fNDXL/y4L+MnF++tzYwlZJC8DZo0cPhba4qb9E9w4hIUhEGPMKbdNXTuYobnaLCPu+VBNOattWN/FYu6SQZJvqJDzYnW0fIRuNgfkT5bW7mlpCJEG9vQbMTpbK0lVcZriqcK51ciH2fZkydEDqfhAH9WV/ubBAX2agf1T8LQyw7R1z91FWqs/GlJZqejjX0hAzhlyCpyhWOxtV/JWDpiy1Z5HO5BKrTRowGZkdv3H4g='
    encSecKey = '9678000fea3661975ccb0f0ac79f5c37d3a739dd8ca87bfb637e04dbe578e8f4125a1484f776e1d972d7d98e48e37de6b454dc1dadb4931016d817c2e722792c0e6a857df8071fb97d4a4b5e1994ba9a2611835c4d7cf7c408bb2881e4185917b41c8294803b1d2634cc0cb01e0542cba4e7e6245057cbc2eab518b359ce0da0'
    data = {
        'params': params,
        'encSecKey': encSecKey
    } 
    lr = requests.post(getUrl(id), data = data,  headers=headers)
    commentText = commentText + '\n\n' + lr.text
    
fs = open('./comment.json', 'w', encoding='utf-8')//写入文件中
fs.write(commentText)
fs.close()

结尾

感觉爬虫还是应该使用python写,更简单。 我最熟悉的本是js。 但是js是异步的。 想一同步的方式写, 稍微有点麻烦。

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值