python3爬取咪咕音乐榜信息(附源代码)

参照上一篇爬虫小猪短租的思路https://www.cnblogs.com/aby321/p/9946831.html,继续熟悉基础爬虫方法,本次爬取的是咪咕音乐的排名

咪咕音乐榜首页http://music.migu.cn/v2/music/billboard/?_from=migu&page=1

注意:本程序有时候运行会报错,此时重新运行即可,报错原因不明了!

 

与小猪短租不同的是,爬取的排名信息不在每首歌曲的详细页面内,需要在分页url中获取(代码19-25行),使用打包循环并且输出给函数get_info()

 

 

 1 """
 2 典型的分页型网站——咪咕音乐榜
 3 有时候运行会报错,有时候正常,原因不知道
 4 """
 5 import requests
 6 from bs4 import BeautifulSoup as bs
 7 import time
 8 
 9 headers = {
10     'User-Agent':'User-Agent:Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'
11 }
12 
13 #获取每一个歌曲的网址,参数是分页url
14 def get_link(url):
15     html_data = requests.get(url, headers = headers)
16     soup = bs(html_data.text, 'lxml')#bs4推荐使用的的解析库
17     #print(soup.prettify())   #标准化输出url中的源代码(有可能跟网页查看中的不一致,网页中有可能标签书写不规范)以此为基础抓取,如果抓取失败,用此命令查看源代码
18     links = soup.select('#js_songlist > div > div.song-name > span > a')#注意循环点!!!
19     ranks = soup.select('#js_songlist > div > div.song-number ')#因为歌曲详情里没有排名信息,因此需要在这部分获取详情信息
20     #print(ranks)
21     for rank, link in zip(ranks,links):#打包循环,主要为了输出配套的rank和link
22         rank = rank.get_text()
23         link = 'http://music.migu.cn' + link.get('href')#观察每个歌曲的详细网页发现,前面部分需要手动添加http://music.migu.cn
24         #print(rank,link)
25         get_info(rank,link)
26 
27 #获取每一个歌曲的详细信息,排名、歌名、歌手和专辑名,参数url是每个歌曲的网址
28 def get_info(rank,url):
29     html_data = requests.get(url, headers = headers)
30     soup = bs(html_data.text, 'lxml')#bs4推荐使用的的解析库
31     # print(soup.prettify())   #标准化输出url中的源代码(有可能跟网页查看中的不一致,网页中有可能标签书写不规范)以此为基础抓取,如果抓取失败,用此命令查看源代码
32     title = soup.select('div.container.pt50 > div.song-data > div.data-cont > div.song-name > span.song-name-text')[0].string.strip()
33 
34     # 用网页copy过来的全部是“body > div.wrap.clearfix.con_bg > div.con_l > div.pho_info > h4 > em”,但是使用这个爬不出来数据(我也不知道why),把body去掉或者用下面最简短的方式(只使用最近的且唯一的div)
35     # title = soup.select('div.pho_info > h4 > em ')
36     # 查询结果title格式是一维列表,需要继续提取列表元素(一般就是[0]),列表元素是前后有标签需要继续提取标签内容,使用get_text()或者string
37     singer = soup.select('div.container.pt50 > div.song-data > div.data-cont > div.song-statistic > span > a')[0].string.strip()
38     cd = soup.select('div.container.pt50 > div.song-data > div.data-cont > div.style-like > div > span > a')[0].string.strip()  # 获取标签的属性值
39 
40     #将详细数据整理成字典格式
41     data = {
42         '排名':rank,
43         '歌名':title,
44         '歌手':singer,
45         '专辑':cd
46     }
47     print(data)
48 
49 
50 #程序主入口
51 if __name__=='__main__':
52     for number in range(1,3):
53         url = 'http://music.migu.cn/v2/music/billboard/?_from=migu&page={}'.format(number)   #构造分页url(不是歌曲详情的url)
54         get_link(url)
55         time.sleep(1)

 输出结果:每次输出data数据(字典型)字段顺序是随机的,因为本身字典型数据就没有顺序,如果想固定顺序的话请使用列表

举一反三:同类型的分页型网站均可使用此爬虫模板,例如豆瓣电影top100、时光网top榜之类的

 

ps:不知道这个榜单准不准,反正我基本没听过(可能是我out了)

转载于:https://www.cnblogs.com/aby321/p/9956949.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用请求登录某些网站的API 文件资料 中文 英文 支持网站 网站 PC模式 移动模式 ScanQR模式 中文 Weibo ✓ ✓ ✓ 新浪微博 Douban ✓ ✗ ✗ 豆瓣 Github ✓ ✗ ✗ Github Music163 ✓ ✗ ✗ 网易云音乐 Zt12306 ✓ ✗ ✗ 中国铁路12306 QQZone ✗ ✗ ✓ QQ空间 QQQun ✗ ✗ ✓ QQ群 QQId ✗ ✗ ✓ 我的QQ中心 Zhihu ✗ ✗ ✓ 知乎 Bilibili ✓ ✓ ✗ B站 Toutiao ✗ ✗ ✗ 今日头条 Taobao ✗ ✗ ✓ 淘宝 Jingdong ✗ ✗ ✓ 京东 Ifeng ✓ ✗ ✗ 凤凰网 Sohu ✗ ✓ ✗ 搜狐 Zgconline ✓ ✗ ✗ 中关村在线 Lagou ✗ ✗ ✗ 拉勾网 Twitter ✗ ✓ ✗ 推特 Vultr ✓ ✗ ✗ Vultr eSurfing ✓ ✗ ✗ 天翼 Renren ✓ ✗ ✗ 人人网 W3Cschool ✓ ✗ ✗ W3Cschool(编程狮) Fishc ✓ ✗ ✗ 鱼C论坛 Youdao ✓ ✗ ✗ 有道 Baidupan ✓ ✗ ✗ 百度网盘 Stackoverflow ✓ ✗ ✗ Stackoverflow CodaLab ✓ ✗ ✗ CodaLab PyPi ✓ ✗ ✗ PyPi Xiami ✓ ✗ ✗ 虾米音乐 Douyu ✗ ✗ ✓ 斗鱼直播 Migu ✓ ✗ ✗ 咪咕音乐 Qunar ✓ ✗ ✗ 去哪儿旅行 Mieshop ✓ ✗ ✗ 小米商城 Mpweixin ✓ ✗ ✗ 微信公众号 Baidutieba ✗ ✗ ✓ 百度贴吧 Dazhongdianping ✗ ✗ ✓ 大众点评 Jianguoyun ✓ ✗ ✗ 坚果云 Cloud189 ✓ ✗ ✗ 天翼云盘 QQMusic ✗ ✗ ✓ QQ音乐 Ximalaya ✗ ✗ ✓ 喜马拉雅 使用DecryptLogin的一些情况 名称 介绍 代码 中文 weiboMonitor click click 微博监控 QQReport click click 生成QQ个人专属报告 bilibiliDownloadUserVideos click click 下载B站指定UP主的所有视频 NeteaseSongListDownloader click click 网易云个人歌单下载器 NeteaseListenLeaderboard click click 网易云个人听歌排行榜 userWeiboSpider click click 下载指定微博用户的所有微博数据 NeteaseSignin click click 网易云音乐自动签到 weiboEmoji click click 微博表情包爬取 weiboSender click click 大吼一声发微博 tbgoods click click 淘宝商品数据小爬虫 jdgoods click click 京东商品数据小爬虫 delallweibos click click 批量删除微博 ClearQzone click click 批量删除QQ空间说说 NeteaseEveryday click click 在终端看网易云每日歌曲推荐 NeteaseClickPlaylist click click 网易云音乐刷歌曲播放量 安装 pip安装 run "pip install DecryptLogin" 源代码安装 (1)离线 第一步:git clone https://github.com/CharlesPikachu/DecryptLogin.git 第二步:cd DecryptLogin->run “ python setup.py install” (2)在线 run “ pip install git + https://github.com/CharlesPikachu/DecryptLogin.git@master” 快速开始 from DecryptLogin import login lg = login.Login() infos_return, session = lg.douban(username[telephone], password) infos_return, session = lg.github(username[email], password) infos_return, session = lg.weibo() infos_return, session = lg.music163(username[telephone/email], password) infos_return, session
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值