用Python写了一个下载网站所有内容的软件,可见即可下

这篇具有很好参考价值的文章主要介绍了用Python写了一个下载网站所有内容的软件,可见即可下。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

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

用Python写了一个下载网站所有内容的软件,可见即可下

今天我们分享一个用Python写下载视频+弹幕+评论的代码。

顺便把这些写成GUI,把这些功能放到一起让朋友用起来更方便~

用Python写了一个下载网站所有内容的软件,可见即可下

环境介绍:

  • python 3.8

  • pycharm 2022专业版 >>> 免费使用教程文末名片获取

python资料、源码、教程\福利皆: 点击此处跳转文末名片获取

代码实战

主要代码分为界面和采集部分

获取数据

网址我屏蔽了,防止误杀。

获取视频
import requests
import re
import json
from pprint import  pprint
import subprocess
import os

def Video(bv_id):
    url = f'https://www.***.com/video/{bv_id}'
    headers = {
        # 防盗链
        'referer': 'https://www.***.com/video/',
        # 浏览器基本身份标识 表示浏览器
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36'
    }
    # 发送请求 ---> <Response [200]> 响应对象,  200状态码 表示请求成功
    response = requests.get(url=url, headers=headers)

    # 获取视频标题
    title = re.findall('"title":"(.*?)","pubdate"', response.text)[0].replace(' ', '')
    # 获取视频数据信息 前端标签两个两个一起
    html_data = re.findall('<script>window.__playinfo__=(.*?)</script>', response.text)[0]
    # 转换数据类型  字符串数据转成json字典数据类型
    json_data = json.loads(html_data)
    # print打印字典数据, 输出一行内容 print(json_data)
    # pprint 打印字典数据, 格式化输出 展开效果 pprint(json_data)
    # 字典数据 B站数据 音频和视频分开的 根据冒号左边的内容, 提取冒号右边的内容 键值对取值
    完整源码、解答、教程皆+VX:qian97378获取
    audio_url = json_data['data']['dash']['audio'][0]['baseUrl']
    video_url = json_data['data']['dash']['video'][0]['baseUrl']
    # 403 Forbidden 没有访问权限.....
    audio_content = requests.get(url=audio_url, headers=headers).content
    video_content = requests.get(url=video_url, headers=headers).content
    if not os.path.exists('video\\'):
        os.mkdir('video\\')
    with open('video\\' + title + '.mp3', mode='wb') as audio:
        audio.write(audio_content)
    with open('video\\' + title + '.mp4', mode='wb') as video:
        video.write(video_content)
    # 获取音频内容以及视频画面内容
    cmd = f"ffmpeg -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')
    return title
采集弹幕
import requests
import re
import os

def get_response(html_url):
    headers = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36'
    }
    response = requests.get(url=html_url, headers=headers)
    response.encoding = response.apparent_encoding
    return response


def get_Dm_url(bv_id):
    link = f'https://www.***.com/video/{bv_id}/'
    html_data = get_response(link).text
    Dm_url = re.findall('<a href="(.*?)"  class="btn btn-default" target="_blank">弹幕</a>', html_data)[0]
    title = re.findall('<input type="text" value="(.*?)"', html_data)[-1]
    return Dm_url, title


def get_Dm_content(Dm_url, title):
    html_data = get_response(Dm_url).text
    content_list = re.findall('<d p=".*?">(.*?)</d>', html_data)
    if not os.path.exists('弹幕\\'):
        os.mkdir('弹幕\\')
    for content in content_list:
        with open(f'弹幕\\{title}弹幕.txt', mode='a', encoding='utf-8') as f:
            f.write(content)
            f.write('\n')

def main(bv_id):
    Dm_url, title = get_Dm_url(bv_id)
    get_Dm_content(Dm_url, title)
采集评论
import requests
import re
import os


def get_response(html_url, params=None):
    headers = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36'
    }
    response = requests.get(url=html_url, params=params, headers=headers)
    return response


def get_oid(bv_id):
    link = f'https://www.***.com/video/{bv_id}/'
    html_data = get_response(link).text
    oid = re.findall('window.__INITIAL_STATE__={"aid":(\d+),', html_data)[0]
    title = re.findall('"title":"(.*?)","pubdate"', html_data)[0].replace(' ', '')
    return oid, title


def get_content(oid, page, title):
    content_url = 'https://***.com/x/v2/reply/main'
    # 完整源码、解答、教程皆+VX:qian97378
    data = {
        'csrf': '6b0592355acbe9296460eab0c0a0b976',
        'mode': '3',
        'next': page,
        'oid': oid,
        'plat': '1',
        'type': '1',
    }
    json_data = get_response(content_url, data).json()
    content = '\n'.join([i['content']['message'] for i in json_data['data']['replies']])
    if not os.path.exists('评论\\'):
        os.mkdir('评论\\')
    with open(f'评论\\{title}评论.txt', mode='a', encoding='utf-8') as f:
        f.write(content)


def main(bv_id):
    oid, title = get_oid(bv_id)
    for page in range(1, 6):
        try:
            get_content(oid, page, title)
        except:
            pass

GUI部分

模块

import tkinter as tk
from tkinter import ttk
import tkinter.messagebox
from Video import Video
import Barrage
import Comment

下载完成提示

def get_content():
    result = number_int_var.get()
    if result == '视频':
        bv_id = bv_va.get()
        title = Video(bv_id)
        tk.messagebox.showinfo(title='温馨提示', message=f'{title}下载完成')

    elif result == '弹幕':
        bv_id = bv_va.get()
        Barrage.main(bv_id)
        tk.messagebox.showinfo(title='温馨提示', message=f'弹幕下载完成')

    elif result == '评论':
        bv_id = bv_va.get()
        Comment.main(bv_id)
        tk.messagebox.showinfo(title='温馨提示', message=f'评论下载完成')

主界面部分

root = tk.Tk()
root.title('B站视频下载软件')
root.geometry('367x134+200+200')
#  透明度的值:0~1 也可以是小数点,0:全透明;1:全不透明
root.attributes("-alpha", 0.9)
# -------------------------------------------------------
tk.Label(root, text='完整源码、解答、教程皆+VX:qian97378', font=('黑体', 13), fg="red").grid(row=0, column=1)
# 我已经把这个工具打包成了exe可执行文件,直接加这个裙获取。
# -------------------------------------------------------
text_label_1 = tk.Label(root, text='选择: ', font=('黑体', 15))
text_label_1.grid(row=1, column=0, padx=5, pady=5)
# -------------------------------------------------------
number_int_var = tk.StringVar()
# 创建一个下拉列表
numberChosen = ttk.Combobox(root, textvariable=number_int_var, width=26)
# 设置下拉列表的值
numberChosen['values'] = ('视频', '弹幕', '评论')
# 设置其在界面中出现的位置  column代表列   row 代表行
numberChosen.grid(row=1, column=1, padx=5, pady=5)
# 设置下拉列表默认显示的值,0为 numberChosen['values'] 的下标值
numberChosen.current(0)
# -------------------------------------------------------
text_label = tk.Label(root, text='BV号:', font=('黑体', 15))
text_label.grid(row=2, column=0, padx=5, pady=5)

bv_va = tk.Variable()
entry_1 = tk.Entry(root, font=('黑体', 15), textvariable=bv_va)
entry_1.grid(row=2, column=1)

Button_1 = tk.Button(root, text='下载', font=('黑体', 13), command=get_content)
Button_1.grid(row=2, column=2, padx=5, pady=5)
# -------------------------------------------------------
root.mainloop()

尾语

感谢你观看我的文章呐~本次航班到这里就结束啦 🛬

希望本篇文章有对你带来帮助 🎉,有学习到一点知识~

躲起来的星星🍥也在努力发光,你也要努力加油(让我们一起努力叭)。

用Python写了一个下载网站所有内容的软件,可见即可下

最后,宣传一下呀~👇👇👇更多源码、资料、素材、解答、交流皆点击下方名片获取呀👇👇文章来源地址https://www.toymoban.com/news/detail-493350.html

到了这里,关于用Python写了一个下载网站所有内容的软件,可见即可下的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 如何快速查找下载外文文献,哪个文献下载网站好用

    ​​如何高效获取到自己需要的外文文献,最好的办法就是去文献来源数据库中查找,你需要的文献来源数据库有可能是Elsevier(sciencedirect)、也可能是Wiley Online Library、也有可能是IEEE等等,外文数据库机构太多了。这些外文文献机构大部分都需要账号和权限才可以使用,有

    2023年04月22日
    浏览(47)
  • 代码下载网站

    背景: 俗话说“工欲善其事必先利其器”,作为一个具有多年经验的计算机工程师,应该善于总结自己的经验才可以,这里记录自己下代码经常用到的网站。 说明: 我们在做学术研究或者项目开发的时候,最需要的就是参考代码了,有时候,找到合适的参考代码,会让我们

    2024年02月10日
    浏览(52)
  • 【Python毕设|课设】基于Python Flask的上海美食信息与可视化宣传网站项目-文末附下载方式以及往届优秀论文,项目其他均为抄袭

    随着大数据和人工智能技术的迅速发展,我们设计并开发了一款基于大数据的上海美食系统。该系统旨在为用户提供全面而个性化的美食服务体验。在这个时代背景下,人们对美食的需求不仅停留在简单的满足口腹之欲,更加注重个性化、健康、便捷的消费体验。 系统的核心

    2024年02月11日
    浏览(28)
  • 网站视频链接自动提取下载

    网站视频链接怎么提取,批量视频下载比较容易的方法不外乎通过复制网站的视频链接,如果通过手动对网站视频链接复制粘贴就有点费力了,网站视频链接提取工具可以替代人工进行网站视频链接批量提取。   网站视频搜索引擎优化该怎么进行?视频优化和网站内容优化大

    2024年02月11日
    浏览(36)
  • 国内镜像网站下载OpenCV

    OpenCV是一个开源的计算机视觉库,广泛用于图像处理和计算机视觉领域。它提供了丰富的图像处理算法和工具,使开发者能够轻松地处理图像、视频和摄像头输入。然而,由于众所周知的原因,有时候在国内直接从OpenCV官方网站下载可能会遇到速度慢或者无法连接的问题。为

    2024年02月05日
    浏览(48)
  • 开源源代码收集下载网站汇总

    0.中国站长(免费):https://down.chinaz.com/ 1.51源码:http://www.51aspx.com/ https://wwwtest.51aspx.com/ 2.源码之家:http://www.codejia.com/ 3.源码之家:http://www.zzvips.com/ 4.https://sourceforge.net/ 5.https://www.80zhan.com/ 6.洪越源代码:http://www.softhy.net/ 8.代码爱好者:http://www.codefans.com/ 24.源码网:http:

    2024年02月05日
    浏览(41)
  • 3D模型:免费3D模型下载网站推荐

    互联网上打着“3D模型免费下载”口号的网站属实不少,但多数网站只提供少量普通模型免费下载,而优质的模型则需要会员等付费条件才能下载,真正免费的网站少之又少,并且鲜为人知。 今天就整理一个免费且好用的3D模型网站推荐给大家。 一、优先推荐:GLTFS模型库(

    2023年04月15日
    浏览(44)
  • 如何下载在线课程网站的视频

    1 m3u8文件下载 这种最简单,直接见 ffmpeg下载m3u8的视频流文件_Box_CSDN的博客-CSDN博客_ffmpeg下载m3u8 2 腾讯视频等 具体内容见:斥巨资研究了一下:如何下载腾讯课堂、小鹅通的付费视频 工具见:腾讯课堂/小鹅通/m3u8 · 语雀 3 小X通 1.首先修改获取的TS地址: https://encrypt-k-

    2023年04月24日
    浏览(52)
  • 3D模型免费下载网站大全

    价格: 免费、付费 格式: obj、max、3ds、c4d、skp、ma/mb、blend、dae、stl、fbx、gltf、glb、usdz 备注: 没有源文件 价格: 免费、付费 格式: fbx、gltf、mtl、obj 备注: 可以下载源文件(c4d或者blender的),包括纹理的文件也可以下载,可以直接还原看到的效果图 价格: 免费、付费 格

    2023年04月10日
    浏览(61)
  • 外文文献检索下载网站哪些比较好用

    在我们撰写论文和做科研时经常会需要查阅下载中外文献资源,检索查找文献是一件非常费脑费时的事情,特别是检索外文文献,如果盲目的检索查找文献更是难上加难,下面介绍几个查阅下载英文文献的常用数据库,希望在文献检索上能给大家带来些便利。 一、学术文献下

    2024年02月06日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包