您的位置:首页 >聚焦 >

爬虫实战!Python多线程爬取网易云热歌音乐

2022-02-28 11:19:24    来源:程序员客栈
多线程爬取网易云热歌音乐前言

学习了蚂蚁老师的《零基础学Python简单爬虫》后我进步很大,开始自己实践爬取酷狗音乐,网易云音乐等各大音乐网站。在我成功的爬取了网易云热歌榜所有音乐后,我开始思考如何才能更快的爬取数据。蚂蚁老师的《python并发编程,用多线程加速程序运行》课程解决了我的问题,现在爬取速度快了十倍!!!


1.网站分析

首先大家打开网易云网站的主页,然后点击排行榜,再点击云音乐特色榜中的热歌榜。(https://music.163.com/#/discover/toplist?id=3778678)大家按F12进入开发者模式,用开发者工具搜索《孤勇者》,点击搜索结果找到网页源代码中的歌曲ID和歌曲名称。

2.导入python库

importosimportrequestsimportreimportthreading3.发送网络请求,访问网站

#网易云网址,以热歌榜单链接为例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=re.findall("
  • (.*?)
  • ",r.text)print(zip_data)#打印查看

    上图我们可以看到,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课程

    先保存图片,然后抖音打开扫码购买,提供代码、课件、答疑服务

    关键词: 我的问题 零基础学 然后点击

    相关阅读