爬虫实战!Python多线程爬取网易云热歌音乐
学习了蚂蚁老师的《零基础学Python简单爬虫》后我进步很大,开始自己实践爬取酷狗音乐,网易云音乐等各大音乐网站。在我成功的爬取了网易云热歌榜所有音乐后,我开始思考如何才能更快的爬取数据。蚂蚁老师的《python并发编程,用多线程加速程序运行》课程解决了我的问题,现在爬取速度快了十倍!!!
1.网站分析
首先大家打开网易云网站的主页,然后点击排行榜,再点击云音乐特色榜中的热歌榜。(https://music.163.com/#/discover/toplist?id=3778678)大家按F12进入开发者模式,用开发者工具搜索《孤勇者》,点击搜索结果找到网页源代码中的歌曲ID和歌曲名称。
2.导入python库importosimportrequestsimportreimportthreading
3.发送网络请求,访问网站
#网易云网址,以热歌榜单链接为例url="https://music.163.com/discover/toplist?id=3779629"headers={"Cookie":"_iuqxldmzr_=32;_ntes_nnid=ae3b5b26314cae4ba35657b357d06348,1640060772701;_ntes_nuid=ae3b5b26314cae4ba35657b357d06348;NMTID=00OFTzvJD26ltfT4kPLk7b6nPCn51oAAAF92z1lmg;WNMCID=xyhddx.1640060773918.01.0;WEVNSM=1.0.0;WM_TID=i2DIsKQNGhZAUABUFBIq86abC%2BMqTYA3;JSESSIONID-WYYY=w0%5CqDCxwTCSuV6TSo71m4xqKq7x9%2F%2FhSWX04%5Ce%5CEREabbI%5CDvvCOFCt6GMD9UUeC2tamR6NwUGM9X9h%2Bmugrqq5u92NSN2hoycyrjb5ldDxE8cPwGcey7bDQvNynG6230m3Saux4JblnRBF%2BchXEp7%2FRNT96%5CHUEk%5CG3geohb6jo6q5p%3A1645762943177;WM_NI=PH%2BSXDfhBlYnm2%2BWub53aGvl0VFZ%2BjlmccwSVtT5KsJUNj33VSMU7BuSHREMe3IPpsTymGnW7W3G4xmYipYo786C8z5c2UE8Mpsu8vBVsbVBmnkWmD69VHJ2XXacu5rNZG8%3D;WM_NIKE=9ca17ae2e6ffcda170e2e6eea8eb3abae9979bf37b98b48fa6d85a879f9aaff821a9b2e5b3d8749bbfc0d7ce2af0fea7c3b92a9498e5b4db50a6b88e8ddc66afeee5b8f86af7edafa8f568f48a8abbaa62b0b3ad84f65996ac9cd6ca798a8b828bb239968d83b6b64ab78d88b3c847a7ed87b1f37998a7a3a8ed5df589fda8b774af87a791dc65f5e8faa4bb72f7bdfeb6c8348fb0bd96bb7e828abd83d54aafb2a5b8f050f6e79aa9c93a9c88af84f83fb29296a8bb37e2a3","Referer":"https://music.163.com/","User-Agent":"Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/98.0.4758.102Safari/537.36",}r=requests.get(url)
4.解析歌曲ID、歌名
正则匹配网易云歌曲ID、歌曲名字
#
上图我们可以看到,zip_data是一个大列表,其中每个元素都是一个元组,每个元组包含了歌曲ID和歌名。
5.爬取音乐函数defcraw(music_url,music_name):music_data=requests.get(music_url,timeout=30).content#新建一个music文件夹ifnotos.path.exists("./music"):os.mkdir("./music")#保存数据withopen(f"./music/{music_name}.mp3","wb")asf:f.write(music_data)
6.创建多线程,准备批量爬取
threads=[]fordatainzip_data:music_id=data[0]music_name=data[1]print(music_name)music_url="http://music.163.com/song/media/outer/url?id="+music_idprint(music_url)threads.append(threading.Thread(target=craw,args=(music_url,music_name)))
music_url由一个音乐下载接口和音乐ID拼接而成。我们可以打印出待爬取的url和歌名如下图所示
7.启动多线程forthreadinthreads:thread.start()
8.等待结束
forthreadinthreads:thread.join()
下载好热歌榜所有的音乐之后,大家可以快乐的一边听音乐,一边敲代码了,哈哈哈~
推荐蚂蚁老师的全套Python课程
先保存图片,然后抖音打开扫码购买,提供代码、课件、答疑服务
相关阅读
-
世界热推荐:今晚7:00直播丨下一个突破...
今晚19:00,Cocos视频号直播马上点击【预约】啦↓↓↓在运营了三年... -
NFT周刊|Magic Eden宣布支持Polygon网...
Block-986在NFT这样的市场,每周都会有相当多项目起起伏伏。在过去... -
环球今亮点!头条观察 | DeFi的兴衰与...
在比特币得到机构关注之后,许多财务专家预测世界将因为加密货币的... -
重新审视合作,体育Crypto的可靠关系才能双赢
Block-987即使在体育Crypto领域,人们的目光仍然集中在FTX上。随着... -
简讯:前端单元测试,更进一步
前端测试@2022如果从2014年Jest的第一个版本发布开始计算,前端开发... -
焦点热讯:刘强东这波操作秀
近日,刘强东发布京东全员信,信中提到:自2023年1月1日起,逐步为...