文章目录

  • 任务分析
  • 核心代码
  • 爬取效果

任务分析

首先通过网易分页歌单的url获取每份歌单的url,然后通过每份歌单的url提取歌单中的前十首歌的url,通过每首歌的url获取一些歌曲的作者和专辑等信息,整个过程通过协程来加快速度。

核心代码

import time
import csv
import gevent
import requests
import asyncio
import aiofiles
from io import BytesIO
from PIL import Image
import requests as req
from bs4 import BeautifulSoup
import ssl
ssl._create_default_https_context = ssl._create_unverified_contexturls = []
analysis_url = []def coroutine1():   #协程1执行producer1的所有url任务job_list1 = []  # 保存所有协程任务for n in range(0,1300,35):url = f'https://music.163.com/discover/playlist/?order=hot&cat=%E8%AF%B4%E5%94%B1&limit=35&offset={n}'print(url)job1 = gevent.spawn(producer1, url)  # 执行一个协程任务job_list1.append(job1)  # 把每个协程任务放进一个列表中保存gevent.joinall(job_list1)  # 等待所有协程结束def coroutine2():  #协程2执行consumer1的所有url任务row = ['id','title','nickname','img','description','count','number of song','number of adding list','share','comment']with open('data.csv','a',encoding='utf-8') as file:csv_writer = csv.writer(file)csv_writer.writerow(row)job_list2 = []for url in urls:job2 = gevent.spawn(consumer1, url)  # 执行一个协程任务job_list2.append(job2)  # 把每个协程任务放进一个列表中保存gevent.joinall(job_list2)  # 等待所有协程结束#使用生产者消费者模式,生产者产生的id链接传给消费者执行
def producer1(url):  headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}response = requests.get(url=url,headers=headers,verify=False)html = response.textsoup = BeautifulSoup(html, 'html.parser') ids = soup.select('.dec a')      # 获取包含歌单详情页网址的标签for i in ids:page_url = 'https://music.163.com/' + i['href']  #生产者传递的id链接#print(page_url)urls.append(page_url)def consumer1(url):  #将获取歌单的信息写入csv文件with open('data.csv','a',encoding='utf-8') as file:csv_writer = csv.writer(file)headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}response = requests.get(url=url,headers=headers,verify=False)html = response.textsoup = BeautifulSoup(html, 'html.parser') idd = soup.select('.s-fc7')[0]['href'].split('=')[-1]   #获取歌单idimg = soup.select('img')[0]['data-src']   #图片链接res = req.get(img)image = Image.open(BytesIO(res.content))  #图片处理try:image.save(str(time.time())+'.jpg')except:image.save(str(time.time())+'.png')#os.remove(os.getcwd()+f'\\{cnt}.jpg')title = soup.select('title')[0].get_text()  #标题nickname = soup.select('.s-fc7')[0].get_text()  #昵称#print(idd,title,nickname)description = soup.select('p')[1].get_text()  #简介count = soup.select('strong')[0].get_text()   #播放次数song_number = soup.select('span span')[0].get_text()  #歌的数目add_lis = soup.select('a i')[1].get_text()   #添加进列表次数share = soup.select('a i')[2].get_text()    #分享次数comment = soup.select('a i')[4].get_text()  #评论次数#print(description,count,song_number,add_lis,share,comment)csv_writer.writerow([idd,title,nickname,img,description,count,song_number,add_lis,share,comment])if float(count)>1000000:  #提取播放数超过1百万的歌单#yield urlres = requests.get(url,headers=headers,verify=False)soup = BeautifulSoup(res.text,'html.parser')song = soup.select('li a')for s in song[:10]:analysis_url.append('https://music.163.com/'+s['href']) #添加歌曲id进列表async def write_demo(songname,singer,album):  #异步实现文件的写# 异步方式执行with操作,修改为 async withasync with aiofiles.open("song.txt","a",encoding="utf-8") as file:await file.write(songname+','+singer+','+album+'\n')def consumer2(url):   headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}res = requests.get(url,headers=headers,verify=False)soup = BeautifulSoup(res.text,'html.parser')songname = soup.select('.f-ff2')[0].string  #获取歌名singer = soup.select('p a')[0].string   #获取歌手album = soup.select('p a ')[1].string   #获取专辑asyncio.run(write_demo(songname,singer,album))  #异步实现写入def coroutine3():   #协程3执行consumer2的所有urlwith open('song.txt','a') as file:file.write('songname,singer,album\n')job_list3 = []for url in analysis_url:job3 = gevent.spawn(consumer2, url)  # 执行一个协程任务job_list3.append(job3)  # 把每个协程任务放进一个列表中保存gevent.joinall(job_list3)  # 等待所有协程结束def main():start_time = time.time()coroutine1()coroutine2()coroutine3()print('time = %f'%(time.time()-start_time))main()

爬取效果

  • 爬取图片如图所示
  • 爬取歌单信息如下
id,title,nickname,img,description,count,number of song,number of adding list,share,comment201586,[拒绝瞌睡] 跟着节拍抖腿的嘻哈音乐 - 歌单 - 网易云音乐,原创君,http://p3.music.126.net/AEjvfbLi56fDGcSXQnkxrg==/109951165529653802.jpg,"
【纯音乐】情绪氛围系列‖钢琴
",10140783,30,(79284),(545),(153)1463586082,[一周欧美说唱] 别人放假Nas加班,圣诞献礼新专辑歌迷大福利 - 歌单 - 网易云音乐,云音乐官方歌单,http://p4.music.126.net/ZcM1CfTLL5gIafgbNzvHwQ==/109951166789455206.jpg,"
【纯音乐】情绪氛围系列‖钢琴
",4705263,50,(29956),(152),(91)1463586082,[Z世代说唱] 在节奏中感受Z世代的嘻哈力量 - 歌单 - 网易云音乐,云音乐官方歌单,http://p3.music.126.net/XOgxHCqyT2HHLZdvLeiCYg==/109951166416650856.jpg,"介绍:
90前的说唱歌手大多早已登入封神殿堂,90后的说唱歌手多数也成为业内代表人,满载00后说唱歌手的东风列车也已经悉数候场,有的说唱歌手潜心学习,时刻准备着展现自己的作品,有的说唱歌手也早已登上评委席,载入说唱的史册。点击播放,进入Z世代的说唱世界,感受Z世代的嘻哈力量吧!
",476933,30,(2860),(28),(15)1463586082,[打游戏听说唱] 说唱律动是你最佳游戏伴侣 - 歌单 - 网易云音乐,云音乐官方歌单,http://p4.music.126.net/9FOaQlzu-THnYxqYTnvv-Q==/109951166032530603.jpg,"
【纯音乐】情绪氛围系列‖钢琴
",3742997,30,(28315),(183),(46)
  • 爬取歌曲信息如下
songname,singer,album
Wave Gods,Nas,A$AP Rocky
Misfit Toys (from the series Arcane League of Legends),Pusha T,Mako
Peru,Fireboy DML,Ed Sheeran
Chrome Lips (feat. Freddie Gibbs),Le$,Freddie Gibbs
Dynasties & Dystopia (from the series Arcane League of Legends),Denzel Curry,GIZZLE
Stack House,Zona Man,Future
City Love,Pacman Da Gunman,Nipsey Hussle
WFM Slow,Realestk,WFM Slow
bluemoon,mixed matches,im a good sport
IDFK,Domo Genesis,IDFK
航行,蒋小呢,航行
差不多姑娘,G.E.M.邓紫棋,摩天动物园
We Can Do It,NINEONE#,We Can Do It
Don't Go,ZIV,倒叙爱情
敏感黑夜,YangYang,敏感黑夜
Pink Love,似水_,陈奕楠
∞,YKEY,无限
说散就散,艾福杰尼,黄旭
心都碎了 :(,YangYang,Lonely Night
她不爱的Rapstar,深水29,情绪制造 Made In Emotions
BORRAXXA,Feid,Manuel Turizo
Mi Gente,J. Balvin,Willy William
Despacito,Sam Tsui,Sam Tsui Covers Vol.6
Danza Kuduro 2019 (Diamont Dr),Lucenzo,Don Omar
Ola La,Kate Linn,Ola La
Danza Kuduro,Don Omar,Lucenzo
Ka Je X2,Adrian Gaxha,Ronela Hajati
Acapella,Mikolas Josef,Fito Blanko
SUBEME LA RADIO,Enrique Iglesias,Descemer Bueno
RITMO (Bad Boys For Life),Black Eyed Peas,J. Balvin
木头人,马思唯,黑马
明亮航线,明堂唱片,地磁卡
日落大道,地下因素Under Factor,爵士乐歌星
Man in the Mirror,小河River,Man in the Mirror
最佳情况,直火帮 Straight Fire Gang,Revenge Season REMIXES
没心没肺,李毅杰PISSY,快乐星球-母星
矛盾,OWEN欧阳子文,矛盾
Chinese shh!,KEY.L刘聪,Kafe.Hu
Dysonman,某幻君,Dysonman

python协程和网易云歌单相关推荐

  1. Python爬虫-selenium爬取网易云歌单

    文章目录 (一)工欲善其事必先利其器-安装工具 Selenium 浏览器 (二)实战 (一)工欲善其事必先利其器-安装工具 Selenium Selenium是一个强大的网络数据采集工具,其最初是为网 ...

  2. Python 将网易云歌单迁移到QQ音乐

    最近,网易云音乐越来越多的歌曲变灰了,许多我以前喜欢听的音乐都消失在云端,非常可惜.最近我还是想听回以前的歌曲,于是只能使用有那些歌曲版权的QQ音乐,麻烦的是,QQ音乐没有我在网易云音乐的歌单,两个软 ...

  3. python网易云_[Python] 网易云歌单/歌曲下载

    界面化 可以根据歌单 / 歌曲ID 下载 歌单/歌曲. eg: 歌单ID: https://music.163.com/#/playlist?id=3233380300 中的 3233380300 运 ...

  4. Python爬虫实战: 爬取网易云歌单

    这篇文章,我们就来讲讲怎样爬取网易云歌单,并将歌单按播放量进行排序,下面先上效果图 1.用 requests 爬取网易云歌单 打开 网易云音乐 歌单首页,不难发现这是一个静态网页,而且格式很有规律,爬 ...

  5. Python爬虫爬取豆瓣TOP250和网易云歌单

    python爬虫(网易云)笔记 @(python学习) 先推荐看一下b站的视频链接如下:https://www.bilibili.com/video/BV12E411A7ZQ?from=search& ...

  6. Python爬虫之网易云歌单音频爬取(解决urlretrieve爬取文件不能播放问题)

    网易云歌单音频爬取 写在前面:最近学习爬虫,对小说和图片都进行过简单爬取,所以打算爬取音频,但是其中遇到点问题也解决了,写下博客记录并希望对大家也有帮助. 爬取对象:对于目前主流的几个音频播放网站,我 ...

  7. python爬网易歌单_Python爬取网易云歌单

    1. 关键点 使用单线程爬取,未登录,爬取网易云歌单主要有三个关键点: url为https://music.163.com/discover/playlist/?order=hot&cat=% ...

  8. 爬虫python代码网易云_爬虫实战(二) 用Python爬取网易云歌单

    最近,博主喜欢上了听歌,但是又苦于找不到好音乐,于是就打算到网易云的歌单中逛逛 本着 "用技术改变生活" 的想法,于是便想着写一个爬虫爬取网易云的歌单,并按播放量自动进行排序 这篇 ...

  9. python爬虫实例网易云-爬虫实战(二) 用Python爬取网易云歌单

    最近,博主喜欢上了听歌,但是又苦于找不到好音乐,于是就打算到网易云的歌单中逛逛 本着 "用技术改变生活" 的想法,于是便想着写一个爬虫爬取网易云的歌单,并按播放量自动进行排序 这篇 ...

最新文章

  1. ZeroMQ接口函数之 :zmq_setsockopt –设置ZMQ socket的属性
  2. 小米(MIUI)系统组招聘职位
  3. 纳德拉:微软正计划“终极移动设备”
  4. java枚举比较_java枚举enum equal与==
  5. 小刘同学的CMOS模拟集成电路学习小记(不停更新)
  6. 问题解决: Google企业邮箱收不到Postfix发的邮件
  7. maven使用java8
  8. 三星 OMNIA7/I8700 刷机 ROM集合
  9. R语言使用epiDisplay包的statStack函数基于因子变量通过分层的方式查看连续变量的统计量(均值、中位数等)以及对应的假设检验、通过设置iqr参数强制函数执行参数检验
  10. MP地面站二次开发教程(四)地面站优化及其功能测试
  11. 人工智能系列电子书分享
  12. 立即注册 | 甲骨文云技术嘉年华重磅开启,全球云大会精彩再现!
  13. 计算机键盘的功能键在哪,台式电脑home键在哪里(有关电脑按键作用介绍)
  14. UVA1335-Beijin Guards(二分)
  15. python web开发屠龙刀flask
  16. Vue3中使用svg文件图标(TS)
  17. Linux -- Ubuntu 修改Home目录下的中文目录为英文
  18. DC-DC电路中通过串联电阻来增加陶瓷电容的ESR从而替代钽电容。
  19. NLP基础:情感分析
  20. 【面试必备】java开发转算法工程师

热门文章

  1. nova service的heatbeat机制
  2. 高中生活--第5篇--学英语的故事(四大难题)
  3. 使用python模拟骰子,并对骰子进行有限次数投掷
  4. 键盘与ASCII码对应表
  5. 峰值检测(个人笔记)
  6. 编程之美 一摞烙饼问题
  7. 无线传感器网络原理及方法|无线传感器网络与应用|清华大学出版社-许毅|5th WEEK
  8. pycharm调试时出现十分缓慢,变量数据没法预览的解决方法
  9. 应届生昆山offer和上海户口offer要如何选择?
  10. cvm java,关于嵌入式Java虚拟机 --- CVM