博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
动态网页抓取二下载MP3
阅读量:3938 次
发布时间:2019-05-23

本文共 5104 字,大约阅读时间需要 17 分钟。

今天来更新第二章

第二章是爬取网易云新歌热门榜单

  • 首先分析一下网页代码

ctrl + u 快捷键

如下图所示
在这里插入图片描述

  • 第二步来解析下我们看到的数据
    在这里插入图片描述
  • 第三步找到我们需要提取的数据
  • 在这里插入图片描述
  • 第四步提取链接地址
    在这里插入图片描述
    第五步提取name值
    在这里插入图片描述
    思路的清晰了我们来整合一下
import osimport requestsfrom  bs4 import BeautifulSoup# #歌单地址# url = 'https://music.163.com/#/discover/toplist?id=3778678'# #外链地址# baser_url = 'http://music.163.com/song/media/outer/url'#请求头url = 'https://music.163.com/discover/toplist?id=3778678'headers = {
'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.72 Safari/537.36'}respoen = requests.get(url=url,headers=headers).texts = BeautifulSoup(respoen, 'lxml')main = s.find('ul', class_='f-hide')#print(main)for music in main.find_all('a'): print('{} : {}'.format(music.text, music['href'])) #这里我们确认没有问题数据的在这里面我们继续往下写
import osimport requestsfrom  bs4 import BeautifulSoup# #歌单地址# url = 'https://music.163.com/#/discover/toplist?id=3778678'# #外链地址# baser_url = 'http://music.163.com/song/media/outer/url'#请求头url = 'https://music.163.com/discover/toplist?id=3778678'headers = {
'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.72 Safari/537.36'}respoen = requests.get(url=url,headers=headers).texts = BeautifulSoup(respoen, 'lxml')main = s.find('ul', class_='f-hide')#print(main)for music in main.find_all('a'): #print(music) #print('{} : {}'.format(music.text, music['href'])) #MP3地址 musicUrl = 'http://music.163.com/song/media/outer/url' + music['href'][5:] + '.mp3' print(musicUrl)
import osimport requestsfrom  bs4 import BeautifulSoup# #歌单地址# url = 'https://music.163.com/#/discover/toplist?id=3778678'# #外链地址# baser_url = 'http://music.163.com/song/media/outer/url'#请求头url = 'https://music.163.com/discover/toplist?id=3778678'headers = {
'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.72 Safari/537.36'}respoen = requests.get(url=url,headers=headers).texts = BeautifulSoup(respoen, 'lxml')main = s.find('ul', class_='f-hide')#print(main)lists = []for music in main.find_all('a'): list = [] #print(music) #print('{} : {}'.format(music.text, music['href'])) #MP3地址 musicUrl = 'http://music.163.com/song/media/outer/url' + music['href'][5:] + '.mp3' #print(musicUrl) # 歌曲名 musicName = music.text #print(musicName) # 单首歌曲的名字和地址放在list列表中 list.append(musicName) list.append(musicUrl) lists.append(list) #循环从列表里面拿数据 for i in lists: url = i[1] # print(url) name = i[0] #print(name) try: print(f'歌曲{name}在在下载', end='\t\t') # MP3数据流 res = requests.get(url, headers=headers) # print(res) MP3 = res.content # print(MP3) with open('./music/' + name + '.mp3', 'wb') as file: file.write(MP3) print(name, '下载成功') except: print('下载失败')

4.我们来封装一下代码保持可读性

import osimport requestsfrom  bs4 import BeautifulSoup# #歌单地址# url = 'https://music.163.com/#/discover/toplist?id=3778678'# #外链地址# baser_url = 'http://music.163.com/song/media/outer/url'#请求头headers = {
'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.72 Safari/537.36'}# 新建一个文件夹保存所有MP3if not os.path.exists('./music/'): # 如果没有当前文件夹则创建一个 os.mkdir('./music/')#定义解析函数def down(url): respoen = requests.get(url=url,headers=headers).text s = BeautifulSoup(respoen, 'lxml') main = s.find('ul', class_='f-hide') # print(main) lists = [] for music in main.find_all('a'): list = [] # print('{} : {}'.format(music.text, music['href'])) musicUrl = 'http://music.163.com/song/media/outer/url' + music['href'][5:] + '.mp3' # MP3 = requests.get(musicUrl).content #print(MP3) #歌曲名 musicName = music.text #print(musicName) # 单首歌曲的名字和地址放在list列表中 list.append(musicName) list.append(musicUrl) lists.append(list) for i in lists: url = i[1] #print(url) name = i[0] #print(name) try: print(f'歌曲{name}正在下载',end='\t\t') #MP3数据流 res = requests.get(url,headers=headers) #print(res) MP3 = res.content #print(MP3) with open('./music/' + name + '.mp3', 'wb') as file: file.write(MP3) print(name,'下载成功') except: print('下载失败')if __name__ == '__main__': #歌单地址 url = 'https://music.163.com/discover/toplist?id=3778678' down(url) #这里数据有点多可能会很慢因为这里是一个单线程写的 #感兴趣的话可以查看我写的那篇多线程的文章

总结

网易云的链接是用外链地址的所以等到以下分析结果

  • 打开网易云音乐,随便找到一首歌,播放,复制网址的ID
  • 例如:杨钰莹的心雨,网址是:
  • 很明显,ID是317151
    https://music.163.com/#/song?id=317151
    那么,这首歌的真实地址就是:
    http://music.163.com/song/media/outer/url?id=317151.mp3
  • 这个地址不会失效的;
    这就得到一个下载公式:
    http://music.163.com/song/media/outer/url?id=ID数字.mp3

把上面红色部分ID数字换成网易云播放页面的id即可。

实例:

  • 潘美辰:我曾用心爱着你
  • http://music.163.com/#/song?id=281951
  • mp3下载、外链地址:
  • http://music.163.com/song/media/outer/url?id=281951.mp3
    因为网址带特色字符所以我们是获取的不数据的我们把特色字符#去掉就可以了

转载地址:http://toywi.baihongyu.com/

你可能感兴趣的文章
Linux - 守护进程-2
查看>>
syslog 和 rsyslog
查看>>
Linux下,write/read,recv/send, recvfrom/sendto的区别
查看>>
Linux - signal通信
查看>>
ubuntu下 rc.local的脚本不运行
查看>>
Linux下简单Makefile文件的编写
查看>>
linux下配置JDK JAVA环境
查看>>
解决Ubuntu 14.04 grub选择启动项10秒等待时间
查看>>
Linux查看某个进程并停止
查看>>
HID攻击进阶——WHID injector
查看>>
Wi-Fi定位劫持
查看>>
WiFi定位劫持·续篇——GPS劫持
查看>>
WiFi攻击进阶版——Deauth攻击
查看>>
iPhone锁屏却锁不住个人信息,iOS安全性真的很高吗?
查看>>
python沙箱逃逸小结
查看>>
共享充电,是雪中送炭还是暗藏危险?——恶意充电宝实验
查看>>
恶意充电宝的克星——USB安全接口
查看>>
重放攻击之无线门铃
查看>>
高端大气上档次·玩转微信摇色子
查看>>
揭秘微信分享背后的陷阱
查看>>