xpath+多进程爬取网易云音乐热歌榜。
用到的工具,外链转换工具
网易云网站直接打开源代码里面并没有对应的歌曲信息,需要对url做处理,


查看网站源代码路径;发现把里面的#号去掉会显示所有内容,
右键打开的源代码路径:view-source:https://music.163.com/#/discover/toplist?id=3778678 去掉#号后:view-source:https://music.163.com/discover/toplist?id=3778678
资源拿到了,开始写代码;
import requests
from lxml import etree
import os
from multiprocessing import Pool
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'
}
# 创建存储路径
pathname = './music/'
if not os.path.exists(pathname):
os.mkdir(pathname)
# 获取歌曲链接的函数
def get_urls(url):
try:
response = requests.get(url=url,headers=headers)
music = etree.HTML(response.text)
music_urls = music.xpath('//ul[@class="f-hide"]/li')
musiclist=[]
for music_url in music_urls:
url = music_url.xpath('./a/@href')[0]
name = music_url.xpath('./a/text()')[0]
musiclist.append({'key':name,'url':'https://link.hhtjim.com/163/'+url.split('=')[-1]+'.mp3'})
# 多进程启动爬取
pool.map(get_music,musiclist)
except Exception:
print('get_urls failed')
# 下载歌曲的函数
def get_music(url):
try:
# 判断歌曲是否已下载,避免网络问题导致重新爬取
if os.path.exists(pathname+url['key']+'.mp3'):
print('歌曲已存在')
else:
response = requests.get(url=url['url'],headers=headers)
with open(pathname+url['key']+'.mp3','wb') as f:
f.write(response.content)
print('正在下载:'+url['key'],url['url'])
except Exception:
print('get_music failed') if __name__ == '__main__':
# 爬取的url的源代码路径
url = 'https://music.163.com/discover/toplist?id=3778678'
# 开启进程池
pool = Pool()
get_urls(url)
代码中获取歌曲链接是拼接的路由要用到音乐外链工具,

控制台输出;
正在下载:那个女孩 https://link.hhtjim.com/163/1300994613.mp3
正在下载:Lemon https://link.hhtjim.com/163/536622304.mp3
正在下载:给未来 https://link.hhtjim.com/163/1377131180.mp3
正在下载:四块五 https://link.hhtjim.com/163/1365221826.mp3
正在下载:再也没有 https://link.hhtjim.com/163/480580003.mp3
正在下载:云烟成雨 https://link.hhtjim.com/163/513360721.mp3
正在下载:你是人间四月天 https://link.hhtjim.com/163/1344897943.mp3
正在下载:静悄悄 https://link.hhtjim.com/163/553815178.mp3
正在下载:我的名字 https://link.hhtjim.com/163/554241732.mp3
正在下载:我的一个道姑朋友 https://link.hhtjim.com/163/1367452194.mp3
正在下载:感谢你曾来过 https://link.hhtjim.com/163/460578140.mp3
正在下载:心安理得 https://link.hhtjim.com/163/474739467.mp3
正在下载:烟火里的尘埃 https://link.hhtjim.com/163/29004400.mp3
打开文件夹查看是否下载成功;

done。
xpath+多进程爬取网易云音乐热歌榜。的更多相关文章
- 用Python爬取网易云音乐热评
用Python爬取网易云音乐热评 本文旨在记录Python爬虫实例:网易云热评下载 由于是从零开始,本文内容借鉴于各种网络资源,如有侵权请告知作者. 要看懂本文,需要具备一点点网络相关知识.不过没有关 ...
- python网络爬虫&&爬取网易云音乐
#爬取网易云音乐 url="https://music.163.com/discover/toplist" #歌单连接地址 url2 = 'http://music.163.com ...
- 爬取网易云音乐评论!python 爬虫入门实战(六)selenium 入门!
说到爬虫,第一时间可能就会想到网易云音乐的评论.网易云音乐评论里藏了许多宝藏,那么让我们一起学习如何用 python 挖宝藏吧! 既然是宝藏,肯定是用要用钥匙加密的.打开 Chrome 分析 Head ...
- Python爬取网易云音乐歌手歌曲和歌单
仅供学习参考 Python爬取网易云音乐网易云音乐歌手歌曲和歌单,并下载到本地 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经做 ...
- 如何用Python网络爬虫爬取网易云音乐歌曲
今天小编带大家一起来利用Python爬取网易云音乐,分分钟将网站上的音乐down到本地. 跟着小编运行过代码的筒子们将网易云歌词抓取下来已经不再话下了,在抓取歌词的时候在函数中传入了歌手ID和歌曲名两 ...
- python爬虫+词云图,爬取网易云音乐评论
又到了清明时节,用python爬取了网易云音乐<清明雨上>的评论,统计词频和绘制词云图,记录过程中遇到一些问题 爬取网易云音乐的评论 一开始是按照常规思路,分析网页ajax的传参情况.看到 ...
- python爬虫:了解JS加密爬取网易云音乐
python爬虫:了解JS加密爬取网易云音乐 前言 大家好,我是"持之以恒_liu",之所以起这个名字,就是希望我自己无论做什么事,只要一开始选择了,那么就要坚持到底,不管结果如何 ...
- Python爬虫——request实例:爬取网易云音乐华语男歌手top10歌曲
requests是python的一个HTTP客户端库,跟urllib,urllib2类似,但比那两个要简洁的多,至于request库的用法, 推荐一篇不错的博文:https://cuiqingcai. ...
- python爬取网易云音乐歌曲评论信息
网易云音乐是广大网友喜闻乐见的音乐平台,区别于别的音乐平台的最大特点,除了“它比我还懂我的音乐喜好”.“小清新的界面设计”就是它独有的评论区了——————各种故事汇,各种金句频出.我们可以透过歌曲的评 ...
随机推荐
- .NET 小程序微信用户支付
微信支付有两种模式:微信用户主动发起的支付.签约委托支付协议后自动支付. 自动支付又分为两种:首次支付时签约.纯签约. 首次支付时签约和纯签约在后续周期若需要发起自动扣款时,需要在应用服务中发起申请扣 ...
- 设计模式php+java版本(1) 基础篇 七大原则
2019年9月6日11:15:46 关于设计模式,其实就是编程思想的一个体现,有比较完善的编程思想写出的项目代码和没有编程思想的写出的差距巨大,代码的可读性,可维护性,可扩展性天差地别,有些刚接触的编 ...
- 19 SpringMVC 拦截器
1. 拦截器的概述(1)SpringMVC框架中的拦截器用于对处理器进行预处理和后处理的技术.(2)可以定义拦截器链,连接器链就是将拦截器按着一定的顺序结成一条链,在访问被拦截的方法时,拦截器链 中的 ...
- 【转帖】Infor转型十年启示录:ERP套件厂商为什么要做云平台?
Infor转型十年启示录:ERP套件厂商为什么要做云平台? https://www.tmtpost.com/4199274.html 好像浪潮国际 就是用的infor的ERP软件. 秦聪慧• 2019 ...
- Word 图片表格自动编号、交叉引用、批量更改图片标题格式、生成图录和表录
1. 前言 论文往往里往往需要插入很多图片,下放需要标上 图a-b,其中 a 是章节号码,b是该章节中第几张图.比如第一章第二副图就是 图1-2.但是有个问题,每次我们插入了一张图或删掉了一张,前后的 ...
- 修改Jupyter Notebook的默认打开路径
一: (也可以直接将删除的部分修改成所要存储的文件路径,之后三个步骤就可以省去了) 二: 打开Windows的cmd,在cmd中输入jupyter notebook --generate-config ...
- python学习-30 总结
小结 1.map函数: 处理序列中的每个元素,得到结果是一个‘列表’,该‘列表’元素个数及位置与原来一样 2.filter:遍历序列中的每个元素,判断每个元素得到的布尔值,如果是True则留下来,例如 ...
- golang笔记之DOS篇
Dos的常用命令 dos的基本介绍 Dos: Disk Operating System 磁盘操作系统 ,简单说一下Windows下的目录 2. dos的基本操作原理 目录的操作: md ...
- 解决 Url is blocked: Requests to the local network are not allowed
问题: 我在学习GitLab + Jenkins 自动化部署时,在GitLab的 MyProject => Settings => Integrations中输入完 &qu ...
- 构建helm chart应用
使用helm命令创建基础目录 helm create t2cp [root@node04 ~]# tree t2cp t2cp ├── charts ├── Chart.yaml ├── templa ...