为了账号安全,请及时绑定邮箱和手机立即绑定

Python爬取酷狗Top500的歌曲!够你吹个小牛皮了吧

一、准备工作

安装 requests 库和 beautifulsoup4 库:

requests 库是处理HTTP请求的一个简洁且简单的第三方库;beautifulsoup4 库是一个解析和处理HTML 和 XML 的第三方库。

二、对网站HTML源码进行分析

https://img1.sycdn.imooc.com/5ff825050001eed606400333.jpg

 

通过对 HTML 源码进行分析,“ 歌手-歌名 ” 信息被封存在标签中,标签在 “class=pc_temp_songlist” 的 标签中。因此,可以用在beautifulsoup4 中的 select 方法来进行筛选:

同样对歌曲时长的分析方法也是跟上面一样,对 select 的具体用法可以参考如下:

Python中在BeautifulSoup库里的find_all、select用法

三、爬取酷狗Top500的歌曲

import requestsfrom bs4 import BeautifulSoupimport json

# 获取网页的HTML源码

def getText(url): try: r = requests.get(url, timeout=30)

 # get()函数的参数url必须链接采用HTTP或HTTPS方式访问,每次请求超时时间为30秒

r.raise_for_status()

# 返回的请求状态status_code不是200,这个方法会产生一个异常

 r.encoding = 'utf-8'

# 对encoding属性赋值更改编码方式

return r.text except: return ""

# 解析HTML页面格式,提取有用信息

def getInfo(url): soup = BeautifulSoup(getText(url), 'html.parser')

 # 创建一个BeautifulSoup对象

songs = soup.select('.pc_temp_songlist > ul > li >a')

# 获取包含“歌手-歌名”信息的标签

times = soup.select('.pc_temp_songlist > ul > li > span .pc_temp_time')

# 获取包含“歌曲时长”信息的标签

for song, time in zip(songs, times): data = { "singer": song.get_text().split('-')[0],

"song title": song.get_text().split('-')[1],

"time": time.get_text().strip() }

print(data) SONGS.append(data)SONGS = []if __name__ == '__main__':

urls = ['https://www.kugou.com/yy/rank/home/{}-8888.html'.format(str(i))

for i in range(1, 24)]

for url in urls: getInfo(url)

print("歌曲数量:", len(SONGS))

 # 爬取的数据以JSON文件格式保存

 with open('songs.json', 'w', encoding='utf-8') as json_file: json_str = json.dumps(SONGS, ensure_ascii=False, indent=4) json_file.write(json_str)

最终生成的json文件格式如下: 非常简单

https://img2.sycdn.imooc.com/5ff8252200016a8e06400295.jpg

 

 


点击查看更多内容
1人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消