首页 > 其他分享 >爬虫基础之爬取歌曲宝歌曲批量下载

爬虫基础之爬取歌曲宝歌曲批量下载

时间:2025-01-13 11:57:13浏览次数:3  
标签:play 批量 url text 爬虫 headers 歌曲 data id

声明:本案列仅供学习交流使用 任何用于非法用途均与本作者无关

需求分析:

本案列所使用的模块
requests (发送HTTP请求)re(用于正则表达式匹配和处理)
parsel  (解析HTML或XML文档)os (用于与操作系统进行交互,如文件和目录操作)

监听数据包:

  • 打开开发者工具 F12 or 右击点击检查  点击网络
  • 点击下一页 或者往下滑
  • Ctrl+F 快捷键打开搜索框 输入想要爬取的数据
     

 

分析:
        通过此界面拿到所有歌曲的内页
        然后点进去分析详情页的数据

 点击播放按钮 监听数据包 复制下图的URL 地址到浏览器中打开

       发现就会下载这个音乐文件
       接着点击下载歌曲里面的下载高品质MP3

         找到这个请求的数据包  后续发送请求 通过正则可以将下载链接提取出来

         好的 分析完毕 我们开始写代码

         老样子 右击复制 cURL(bash) 打开我们的爬虫工具
         
爬虫工具库-spidertools.cn      

        复制代码到本地Py文件 
        以下是实现一首歌曲的采集
        发现是根据每首歌的id 来下载的歌曲 因此我们需要拿到所有下载歌曲的id
        在每首歌曲的详情页

# 导包
import re
import requests

headers = {
    "accept": "application/json, text/javascript, */*; q=0.01",
    "accept-language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
    "content-type": "application/x-www-form-urlencoded; charset=UTF-8",
    "origin": "https://www.gequbao.com",
    "priority": "u=1, i",
    "referer": "https://www.gequbao.com/music/9653",
    "sec-ch-ua": "\"Chromium\";v=\"128\", \"Not;A=Brand\";v=\"24\", \"Microsoft Edge\";v=\"128\"",
    "sec-ch-ua-mobile": "?0",
    "sec-ch-ua-platform": "\"Windows\"",
    "sec-fetch-dest": "empty",
    "sec-fetch-mode": "cors",
    "sec-fetch-site": "same-origin",
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 Edg/128.0.0.0",
    "x-requested-with": "XMLHttpRequest"
}
cookies = {
    "Hm_lvt_c2b69091f94cb4368f25c28fc7c2d28c": "1736209777,1736210463",
    "HMACCOUNT": "0EB52C16E9A34AE0",
    "Hm_lpvt_c2b69091f94cb4368f25c28fc7c2d28c": "1736210603"
}
url = "https://www.gequbao.com/api/play-url"
data = {
    "id": "SF9bVDxXUl1RQ1heUHJe"
}
response = requests.post(url, headers=headers, cookies=cookies, data=data)
# 通过re正则提取 下载的url地址
down_url = ''.join(re.findall(r'"url":"(.*?)"',response.text)[0]).replace('\\','')
# 保存数据 歌曲 图片 视频  保存均为二进制的格式
content = requests.get(url=down_url, headers=headers, cookies=cookies, data=data).content
# 以二进制的形式 进行写入保存
with open('1.mp3','wb') as f:
    f.write(content)

接着我们拿到所有歌曲的内页链接  里面包含歌曲的id

# 发送请求
first_url = 'https://www.gequbao.com/s/%E9%82%93%E7%B4%AB%E6%A3%8B'
# 后面的参数 其实就是邓紫棋
result= requests.get(url=first_url,headers=headers,cookies=cookies,data=data)
print(result.text)

从返回的数据中搜索是否存在我们想要的数据 

提取数据  打开元素面板 查看元素所在的位置

select = parsel.Selector(result.text)
lis = select.css('.row .col-8.col-content')
for li in lis:
    in_id = li.css('a::attr(href)').get().split('/')[-1]

        接着我们构造URL 对详情页发送请求 

url = f'https://www.gequbao.com/music/{in_id}'

        从返回的数据中通过正则提取我们想要的数据 id

    resp = requests.get(url, headers=headers)
    # print(resp.text)
    # 歌曲id
    play_id = re.findall(r"window.play_id = '(.*?)';", resp.text)[0]
    # 歌曲名字
    play_title = re.findall(r"window.mp3_title = '(.*?)';", resp.text)[0]
    # 歌手
    play_author = re.findall(r"window.mp3_author = '(.*?)';", resp.text)[0]
    # 因为正则提取出来的是列表 对列表进行取值  

        最后 还记得开始下载一首歌曲的请求嘛 对此发送请求 
        将我们从每首歌的详情页获取到的play_id 传进去
        完整的代码如下 

import requests
import re
import parsel
import os


inp = input('请输入要采集的歌手:')
headers = {
    'user-agent':
        'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 Edg/130.0.0.0'
}


first_url = f'https://www.gequbao.com/s/{inp}'
# .row   .col-8.col-content a
result = requests.get(url=first_url,headers=headers)
select = parsel.Selector(result.text)
lis = select.css('.row .col-8.col-content')
for li in lis:
    in_id = li.css('a::attr(href)').get().split('/')[-1]
    # print(in_id)
    # 以上代码拿到id
    
    # 构建详情页链接
    url = f'https://www.gequbao.com/music/{in_id}'
    
    resp = requests.get(url, headers=headers)
    # print(resp.text)
    play_id = re.findall(r"window.play_id = '(.*?)';", resp.text)[0]
    play_title = re.findall(r"window.mp3_title = '(.*?)';", resp.text)[0]
    play_author = re.findall(r"window.mp3_author = '(.*?)';", resp.text)[0]
    # print(play_id,play_title,play_author)
    
    # 下载歌曲的链接 需要传入每个歌曲的id
    link = 'https://www.gequbao.com/api/play-url'
    
    data = {
        'id': play_id
    }
    response = requests.post(url=link, data=data, headers=headers)
    json_data = response.json()
    # 获取json数据
    # 提取下载链接
    play_url = json_data['data']['url']
    

最后我们根据不同歌手来保存数据 
        需要导入os 模块

    # 获取二进制数据 
    content = requests.get(play_url, headers=headers).content
    # 定义文件目录
    filed_name=f'music\\{play_author}\\'
    # 自动创建 文件夹
    if not os.path.exists(filed_name):
        os.makedirs(filed_name)    
    # 以二进制的数据写入保存
    with open(f'{filed_name}' + play_author + play_title + '.mp3', 'wb') as f:
        f.write(content)
        print(f'正在采集{play_author}{play_title}歌曲')

         以下是本次案例的所有代码 仅供学习参考使用

import requests
import re
import parsel
import os


inp = input('请输入要采集的歌手:')
headers = {
    'user-agent':
        'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 Edg/130.0.0.0'
}


first_url = f'https://www.gequbao.com/s/{inp}'
# .row   .col-8.col-content a
result = requests.get(url=first_url,headers=headers)
select = parsel.Selector(result.text)
lis = select.css('.row .col-8.col-content')
for li in lis:
    in_id = li.css('a::attr(href)').get().split('/')[-1]
    # print(in_id)
    # 以上代码拿到id

    url = f'https://www.gequbao.com/music/{in_id}'

    resp = requests.get(url, headers=headers)
    # print(resp.text)
    play_id = re.findall(r"window.play_id = '(.*?)';", resp.text)[0]
    play_title = re.findall(r"window.mp3_title = '(.*?)';", resp.text)[0]
    play_author = re.findall(r"window.mp3_author = '(.*?)';", resp.text)[0]
    # print(play_id,play_title,play_author)

    link = 'https://www.gequbao.com/api/play-url'

    data = {
        'id': play_id
    }
    response = requests.post(url=link, data=data, headers=headers)
    json_data = response.json()
    play_url = json_data['data']['url']

    content = requests.get(play_url, headers=headers).content
    filed_name=f'music\\{play_author}\\'
    if not os.path.exists(filed_name):
        os.makedirs(filed_name)
    with open(f'{filed_name}' + play_author + play_title + '.mp3', 'wb') as f:
        f.write(content)
        print(f'正在采集{play_author}{play_title}歌曲')


运行代码 

        本次的案例分享就到此结束啦 感谢大家的观看 您的点赞和关注是我更新的动力 

         

标签:play,批量,url,text,爬虫,headers,歌曲,data,id
From: https://blog.csdn.net/2302_80243887/article/details/144978900

相关文章

  • 使用Python爬虫将抓取的数据保存到CSV文件
    在爬虫开发中,数据的存储是至关重要的一步。通常情况下,爬取的数据需要存储在一种易于后续分析和处理的格式中。CSV(Comma-SeparatedValues,逗号分隔值)是一种非常流行的数据存储格式,因其简单、易于处理以及与许多数据分析工具(如Excel、Pandas等)兼容,成为了很多爬虫项目中常用的......
  • 定时抓取数据:Python爬虫与定时任务实现每日数据采集与存储
    引言在现代数据驱动的世界中,实时获取和存储数据是许多应用的核心需求。无论是金融行业的实时汇率监控,还是电商行业的价格变化追踪,定时抓取数据都是一种高效的数据采集方式。本文将详细介绍如何使用Python结合爬虫技术和定时任务,实现每天定时抓取数据并将其存入数据库。一......
  • python语言daifanyedeshipin爬虫程序代码QZQ
    importrequestsimportosimportsubprocessurl=‘https://api.bilibili.com/x/space/wbi/arc/search?mid=3493140394674396&pn=1&ps=25&index=1&order=pubdate&order_avoided=true&platform=web&web_location=1550101&dm_img_list=[]&am......
  • Python 网络爬虫全面指南
    ......
  • 利用Python爬虫获取item_search_shop-获得店铺的所有商品API接口
    在电子商务领域,获取店铺的所有商品信息对于市场分析、竞品研究和用户体验优化至关重要。淘宝开放平台提供了丰富的API接口,其中item_search_shop接口允许开发者获取指定店铺的所有商品信息。本文将详细介绍如何使用Python爬虫技术调用该API接口,并对获取到的数据进行分析和应用。一......
  • Scrapy 爬虫完全规则化的思考
    看了《Python3网络爬虫开发实战(第2版)》,书中15章在讲到Scrapy框架时,15.12节谈到了规则化爬虫。作者提到的规则化思路如下:如果我们可以保留各个站点的Spider的公共部分,提取不同的部分进行单独配置(如将爬取规则页面解析方式等抽离出来,做成一个配置文件),那么我们在新增一个爬虫的......
  • python中国科学院院士图片+文本爬虫代码
    1.爬取网页https://www.cae.cn/cae/html/main/col48/column_48_1.html 2.爬虫思路 1.网页源码分析,判断网页是动态网页与静态网页(改网页位静态网页)2.获取每位院士网页地址3.进入网页查看院士图片地址,与院士文本介绍内容,(利用re库解析网页)4.数据存储,图片存储,注意保存图片......
  • 【Elasticsearch】批量操作:优化性能
    ......
  • 视频批量下载器-闪豆视频下载器
    闪豆视频下载器是一款专注于帮助用户批量下载在线视频的工具软件。其设计理念是为了提供简便快捷的视频下载体验,特别适合需要频繁下载网络视频的用户群体软件功能批量下载功能,用户可以一次性下载多个视频链接。视频格式转换,支持将下载的视频转换为常见的视频格式。视频质......
  • 批量混剪美女跳舞视频以提升原创性技术研究
    本文旨在探讨一种高效的视频编辑技术,通过批量混剪美女跳舞视频来提升视频内容的原创性,从而增加在视频号平台上的创作者分成并快速吸引粉丝。文章详细阐述了批量混剪的思路与流程,包括素材准备、功能勾选、裂变功能选项、添加特效与边框等关键步骤,为视频创作者提供了实用的技术......