当前位置:首页 > 技术教程 > 正文内容

[Python] 酷我音乐歌曲爬取

万福Blog7个月前 (05-14)技术教程3770

1652461850(1).png


前言

写这篇博客的初衷是加深自己对网络请求发送和响应的理解,仅供学习使用,请勿用于非法用途!文明爬虫,从我做起。下面进入代码模式。

import asyncio
from urllib.parse import quote
import aiohttp
import logging
import aiofiles
 
referer = 'https://www.kuwo.cn'
# 请求头
headers = {
    "Cookie": "_ga=GA1.2.2021007609.1602479334; Hm_lvt_cdb524f42f0ce19b169a8071123a4797=1602479334,1602673632; "
              "_gid=GA1.2.168402150.1602673633; Hm_lpvt_cdb524f42f0ce19b169a8071123a4797=1602673824; "
              "kw_token=5LER5W4ZD1C",
    "csrf": "5LER5W4ZD1C",
    "Referer": "{}".format(referer),
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
                  "Chrome/86.0.4240.75 Safari/537.36",
}
 
logging.basicConfig(level=logging.DEBUG,
                    format='%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s')
 
 
async def searchSong(session, song_name):
    encodeName = quote(song_name)
    url = f'https://www.kuwo.cn/api/www/search/searchMusicBykeyWord?key={encodeName}&pn=1&rn=30&httpsStatus=1'
    res = await session.get(url=url, headers=headers)
    return await res.json()
 
 
async def downloadSong(session, rid, name, singer):
    url = f'http://www.kuwo.cn/api/v1/www/music/playUrl?mid={rid}&type=convert_url3&br=320kmp3'
    res = await session.get(url=url, headers=headers)
    res_json = await res.json()
    download_url = res_json['data']['url']
    response = await session.get(download_url, headers=headers)
    data = await response.content.read()
    async with aiofiles.open(f'music/{name}-{singer}.mp3', mode='wb') as f:
        logging.info(f"{name}-{singer}.mp3下载完成")
        await f.write(data)
 
 
async def main(song_name):
    async with aiohttp.ClientSession() as session:
        song_json = await searchSong(session, song_name)
        songs_info = song_json['data']['list']
        tasks = []
        for song_info in songs_info:
            name = song_info['name'].replace(' ', '').replace('へ-', '').replace('|', '')
            artist = song_info['artist']
            rid = song_info['rid']
            logging.info(f"歌曲名称:{name}|歌手:{artist}|id:{rid}")
            tasks.append(asyncio.create_task(downloadSong(session, rid, name, artist)))
        await asyncio.wait(tasks)
 
 
if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    loop.run_until_complete(main("满天星辰不及你"))


最新活动给力技术站长交流文章分享:721054542 ,请猛戳这里→点击入群
 您阅读本篇文章共花了: 

扫描二维码推送至手机访问。

版权声明:本文由万福博客网发布,如需转载请注明出处。

本文链接:https://blog.08qq.cn/post/49.html

分享给朋友:

相关文章

Discuz!论坛二次开发视频教程

Discuz!论坛二次开发视频教程

本套discuz论坛二次开发视频教程是Discuz的二次开发视频教程,适合有一定php基础的人学习,希望您通过本套discuz的二次开发视频教程能够学会discuz论坛的常用二次开发技巧,学习贵在坚持,祝您在学习的道路上能够披荆斩棘,突破重...

此次放开双手,快速推送网站地图自动推送的PHP代码

此次放开双手,快速推送网站地图自动推送的PHP代码

利用宝搭的计划任务,自定义下述代码为任意文件名的php文件,配置好您的api,可实现自动读取网站的sitemap.xml地图文件,并像百度默认推送100条链接。可配合宝塔计划任务进行定时定量推送,各位自行琢磨!第一步打开宝搭控制面板后台找到...

2022手把手教会您在线全程免费办理个体户公司营业执照

2022手把手教会您在线全程免费办理个体户公司营业执照

            最近网上闲逛找到了个《0成本快速注册营业执照》的方法,现在整理了方法分享给大家。注册地仅限海南地区。其他地区测试一、前言目测以下地区可办理,方法看教程大同小...

Z-BlogPHP侧栏热门文章和热评文章不显示文章怎么解决

Z-BlogPHP侧栏热门文章和热评文章不显示文章怎么解决

其实每隔一段时间就会有人来问博主为什么侧栏的热门文章不显示文章呢?空白的一片片,与其每次重复解决倒不如写一篇文章解决下侧栏不显示热门文章的问题。这个问题首先可以排除时间问题,先要确定您所调用的时间是否正确,这个主题设置中都有,可以设置热门或...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。