• 用Python撸点视频背景音乐素材


    最近疫情,被关烦了,禁足得快发霉了。然后也在学习视频剪辑,视频剪辑需要大量的背景音乐素材,总不能自己唱吧,于是想着网络上撸一些。某度了一下,什么某*fine和某*音悦试听了下,音频里都有万恶的广告,果断放弃,有时间再去撸他们的。今天某*子办公的音乐素材。找到音效配乐栏目,打开开发者工具开始查找。

    随便找一首试听,开发者工具-网络-media,可以清楚得看到音频的源文件地址。通过查找源文件地址的某些字符串的时候,发现并没有json数据地址,音频的源文件地址全部渲染在网页文本中并且类似于:https://img-cdn2.xxx.com/sound/00/31/31/45/xxx.mp3。那就简单了。开始构造代码。

     单线程:

     1 # -*- encoding: utf-8 -*- 
     2 # @Time: 2022/4/28 10:53
     3 # @Author: 、一叶孤城
     4 # @File: yespik.py
     5 # @IDE: PyCharm
     6 # @Motto: ABC(Always Be Coding)
     7 
     8 import concurrent.futures
     9 import random
    10 import re
    11 import time
    12 import requests
    13 import os
    14 
    15 def get_response(page_url):
    16     # 一个获取网页文本的函数
    17     headers = {
    18         'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36',
    19     }
    20     response = requests.get(url=page_url, headers=headers) # 响应
    21     response.raise_for_status() # 排错
    22     response.encoding = response.apparent_encoding # 自动识别编码
    23     response.encoding = 'utf-8' # 重置编码
    24     return response # 返回响应,因为有text和content的内容需要在后面调用,所以只返回响应
    25 
    26 def save_media(media_real_url, media_title):
    27     # 先创建文件夹
    28     filePath = './视频剪辑音频文件/' # 在当前文档的目录下创建一个文件夹
    29     if not os.path.exists(filePath):
    30         os.mkdir(filePath) # 创建文件夹
    31 
    32     media_content = requests.get(url=media_real_url).content # 请求音频数据
    33     format_name = media_real_url.split('.')[-1] # 取到后缀名
    34     # 做个判定吧,一般是有的
    35     if media_content:
    36         # 如果有数据,就尝试保存
    37         # 开始保存
    38         try:
    39             with open(filePath + media_title + '.' + format_name, mode='wb') as f:
    40                 f.write(media_content)
    41                 print(f'--正在保存{media_title},请稍等!')
    42         except:
    43             print('有异常,请检查!')
    44     else:
    45         print('没有content数据!')
    46 
    47 def parse_page(url):
    48     # 解析列表页的函数
    49     media_page_data = get_response(page_url=url).text # 获取列表页面的文本
    50     # 音频数据范例:https://img-cdn2.yespik.com/sound/00/31/31/45/313145_60306d4d1114cc554dcfe44ea5cab8a8.mp3
    51     # 所以提取音频数据只需要从网页文本数据中用正则提取上面的内容就ok了
    52     media_lists = re.findall('src="//(.*?)" type="', media_page_data)
    53     # 标题也用正则来提取
    54     media_titles = re.findall('<a target="_blank" href="//www.yespik.com/show-sound_\d+.html">(.*?)</a> </div>', media_page_data)
    55     media_datas = zip(media_lists, media_titles)
    56 
    57     for media_url, media_title in media_datas:
    58         # 构造播放地址的url
    59         media_real_url = 'https://' + media_url
    60         print(media_real_url, media_title, sep = ' | ')
    61         save_media(media_real_url, media_title)
    62 
    63 def main(url):
    64     # 主函数
    65     parse_page(url)
    66 
    67 if __name__ == "__main__":
    68     app = concurrent.futures.ThreadPoolExecutor(max_workers=10)
    69     # 开始分页
    70     for page in range(1, 30+1):
    71         time.sleep(random.uniform(2, 5)) # 随机休眠
    72         if page == 1:
    73             url = 'https://www.yespik.com/sound/'
    74         else:
    75             url = f'https://www.yespik.com/sound/0--0-default/p_{page}/'
    76         print(f'----------***开始采集第{page}页数据***----------')
    77         main(url)

    多线程:(在路上)

    程序运行截图和保存结果截图:

    申明:本文仅供学习和交流使用,如有侵权,请联系我删除。

  • 相关阅读:
    hibernate-取消关联外键引用数据丢失抛异常的设置@NotFound
    css-画三角箭头
    tomcat提示警告: An attempt was made to authenticate the locked user"tomcat"
    liunx下tomcat启动 Cannot find ./catalina.sh
    java:提示Could not initialize class sun.awt.X11GraphicsEnvironment
    MySQL定时器开启、调用实现代码
    mysql-存储过程案例-存储过程中创建表和修改表数据
    PowerDesigner导出SQL时自动生成注释
    mysql-利润set变量模拟分组查询每组中的第N条数据
    HTTP 405 错误 – 方法不被允许 (Method not allowed)
  • 原文地址:https://www.cnblogs.com/mafu/p/16202234.html
Copyright © 2020-2023  润新知