• Python批量采集美女内容并把音频数据和画面内容合并保存


    前言

    嗨喽,大家好呀!这里是魔王呐~

    环境使用:

    • Python 3.8
    • Pycharm
    • ffmpeg
      软件的使用 合成视频和音频 需要找wo 领取

    模块使用:

    • import requests >>> pip install requests

    内置模块

    你安装好python环境就可以了

    • import re
    • import json
    • import subprocess

    Python的应用学习方向有哪些?

    网站开发:

    如目前优秀的全栈的 django、框架flask ,都继承了python简单、明确的风格,开发效率高、易维护,与自动化运维结合性好。

    python已经成为自动化运维平台领域的事实标准;

    python开发的网站:
    豆瓣 , Youtube , Dropbox , 豆瓣…等等

    爬虫程序

    在爬虫领域,Python几乎是霸主地位,将网络一切数据作为资源,通过自动化程序进行有针对性的数据采集以及处理。

    从事该领域应学习爬虫策略、高性能异步IO、分布式爬虫等,并针对Scrapy框架源码进行深入剖析,从而理解其原理并实现自定义爬虫框架。

    数据分析

    Python语言相对于其它解释性语言最大的特点是其庞大而活跃的科学计算生态,

    在数据分析、交互、可视化方面有相当完善和优秀的库.

    自动化脚本

    执行许多重复的任务,例如阅读 pdf、播放音乐、查看天气、打开书签、清理文件夹等等,

    使用自动化脚本就无需手动一次又一次地完成这些任务,非常方便。

    人工智能

    各种人工智能算法都基于Python编写,尤其PyTorch之后,Python作为AI时代头牌语言的位置基本确定。

    游戏开发/辅助 自动化测试 运维

    基本四大步骤:

    1. 发送请求
    2. 获取数据
    3. 解析数据
    4. 保存数据

    在这里插入图片描述

    完整代码

    headers里的有一个网址被我删去~可自行添加一下哦

    import requests  # 数据请求模块
    import re  # 正则表达式模块
    import json  # 序列化与反序列化
    import pprint  # 格式化输出模块
    import subprocess
    import os  # 文件操作模块
    
    
    def get_response(html_url):
        """
        发送请求函数
            模拟浏览器对于url地址发送请求, 获取服务器返回响应数据
            请求头headers是用来伪装
                user-agent: 用户代理 表示浏览器基本身份标识
        :param html_url: 要请求网址是什么
        :return: response 服务器返回响应数据
        """
        headers = {
            'referer': '',
            'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.54 Safari/537.36'
        }
        response = requests.get(url=html_url, headers=headers)  # <Response [200]> 响应对象
        # 200 状态码 表示请求成功
        # print(response)
        return response
    
    
    def get_video_info(html_url):
        """
        获取视频信息函数
        def 关键字 用自定义函数 get_video_info函数名 html_url 形式参数 <不具备实际意义>
        :param html_url: 传入视频播放页面url地址
        :return: 视频信息
    
        正则表达式提取数据:
            re.findall() 需要给这个括号里面传两个基本参数
                从什么地方去找什么样数据
            re.findall('<h1 id="video-title" title="(.*?)" class="video-title">', response.text)
            从response.text里面去找 <h1 id="video-title" title="(.*?)" class="video-title"> 这段数据
            这段数据中 (.*?) 这段就是我们想要数据 .*?表示匹配任意字符(除了换行符\n以外)
    
        正则表达式 全部掌握, 系统学习2.5个小时
            列表 list 正则匹配出来的数据返回列表
            <作为文件名数据保存, 都是要字符串数据>
            [0] 取列表里第一个元素
        """
        response = get_response(html_url=html_url)
        # print(response.text)  # 网页源代码 js逆向需要你掌握JavaScript基础语法
        title = re.findall('<h1 id="video-title" title="(.*?)" class="video-title">', response.text)[0].replace(' ', '')
        html_data = re.findall('<script>window.__playinfo__=(.*?)</script>', response.text)[0]
        # print(title)
        # print(html_data)
        # print(type(html_data))  # type内置函数, 可以查看数据类型
        json_data = json.loads(html_data)
        # print(json_data)
        # print(type(json_data))
        # pprint.pprint(json_data)
        # 字典取值好处: 键值对取值 根据冒号左边内容<键>, 提取冒号右边内容<值>
        """
        源码、解答、教程、资料加Q群:832157862
        dit = {
            '键1': '值1',
            '键2': '值2',
        }
        dit['键2'] >>> '值2'  jsonpath
        """
        audio_url = json_data['data']['dash']['audio'][0]['baseUrl']
        video_url = json_data['data']['dash']['video'][0]['baseUrl']
        # print(title)
        # print(audio_url)
        # print(video_url)
        video_info = [title, audio_url, video_url]
        return video_info
    
    
    def save(title, audio_url, video_url):
        """
        保存数据函数
        :param title:  视频标题
        :param audio_url: 音频url
        :param video_url: 视频url
        :return:
    
        """
        # 调用前面定义好的数据请求函数
        audio_content = get_response(html_url=audio_url).content  # 获取视频和音频二进制数据内容
        video_content = get_response(html_url=video_url).content
        # wb二进制写入数据
        with open('video\\' + title + '.mp3', mode='wb') as f:  # 保存数据, 保存数据前提是得获取数据
            f.write(audio_content)
        with open('video\\' + title + '.mp4', mode='wb') as f:  # 保存数据, 保存数据前提是得获取数据
            f.write(video_content)
        print(title, '保存成功')
        #  合并视频 需要 ffmpeg软件 找木子获取
        cmd = f"D:\\demo\\ffmpeg\\bin\\ffmpeg.exe -i video\\{title}.mp4 -i video\\{title}.mp3 -c:v copy -c:a aac -strict experimental video\\{title}output.mp4"
        subprocess.run(cmd, shell=True)
        os.remove(f'video\\{title}.mp4')
        os.remove(f'video\\{title}.mp3')
    
    
    def main(bv_id):
        """
        主函数 整合前面所有定义好的函数
        :param bv_id: 视频bv号 视频ID
        :return:
        """
        link = f'https://www.bilibili.com/video/{bv_id}'
        video_info = get_video_info(html_url=link)  # 调用获取视频信息函数 返回数据是什么?
        save(video_info[0], video_info[1], video_info[2])  # 保存函数
    
    
    if __name__ == '__main__':
        # 函数入口 当文件运行时的时候下面的代码块会被执行
        # 当文件被当作模块被调用的时候, 下面的代码不会执行
        # print('hello')
        # bv = input('请输入你想要下载视频BV号: ')
        for page in range(1, 7):
            index_url = f'https://api.bilibili.com/x/space/arc/search?mid=487939159&ps=30&tid=0&pn={page}&keyword=&order=pubdate&jsonp=jsonp'
            json_data = get_response(html_url=index_url).json()
            # pprint.pprint(json_data)
            bv_id_list = [i['bvid'] for i in json_data['data']['list']['vlist']]
            title_list = [i['title'] for i in json_data['data']['list']['vlist']]
            print(bv_id_list)
            print(title_list)
            # for bv_id in bv_id_list:
            #     main(bv_id=bv_id)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127

    在这里插入图片描述
    在这里插入图片描述

    尾语

    成功没有快车道,幸福没有高速路。

    所有的成功,都来自不倦地努力和奔跑,所有的幸福都来自平凡的奋斗和坚持

    愿所有美好如期而至,以后的生活不将就,也不辜负。

    ——励志语录

    本文章就写完啦~感兴趣的小伙伴可以复制代码去试试

    你们的支持是我最大的动力!!感谢陪伴~

    记得三连哦~ 💕 欢迎大家阅读往期的文章呀

  • 相关阅读:
    Monkey命令
    (unordered)map和set封装(底层红黑树)
    python第五次作业
    【MySQL基础篇】MySQL数据库安装教程
    小程序太阳码
    初识uboot
    ASP.NET大型外卖订餐系统源码 (PC版+手机版+商户版)
    Ps:PSDT 模板文件
    springboot学习三:Spring Boot 配置文件语法、静态工具类读取配置文件、profile多环境配置、devtools热部署
    【Linux】嵌入式·NAND Flash
  • 原文地址:https://blog.csdn.net/python56123/article/details/124947287