Python+tkinter实现网站下载工具

目录
  • 前言
  • 开发环境
  • 本次项目案例步骤
  • 先展示下完成品的效果
  • 界面
    • 导入模块
    • 先创建个窗口
    • 功能按键
  • 主要功能代码编写
    • 功能一
    • 功能二
    • 功能三

前言

最近很多同学想问我,怎么把几个代码的功能集合到一起?

很简单,写一个界面就行了,想要哪个代码运行,鼠标轻轻一点就行

开发环境

python 3.8: 解释器

pycharm: 代码编辑器

本次项目案例步骤

1.先确定想要的功能,今天这个项目的主要功能为三个

  • 视频
  • 评论
  • 弹幕

2.创建一个简单的用户交互界面,简洁明了

先展示下完成品的效果

界面

导入模块

import tkinter as tk
from tkinter import ttk
import tkinter.messagebox

先创建个窗口

root = tk.Tk()
root.title('哔站下载软件')
root.geometry('367x134+200+200')
#  透明度的值:0~1 也可以是小数点,0:全透明;1:全不透明
root.attributes("-alpha", 0.9)

​​​​​​​root.mainloop()

功能按键

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))
Button_1.grid(row=2, column=2, padx=5, pady=5)

主要功能代码编写

功能一

我们用正则来提取数据

正则表达式 —> 对于字符串数据类型进行提取/解析

re模块findall() ----> 告诉程序从什么地方去找什么数据

re.findall() '“title”:“(.?)“,“pubdate”', response.text

从 response.text 里面 去找 “title”:”(.?)”,“pubdate” 其中括号里内容就是我们要的

def Video(bv_id):
    url = f'https://www.bilibili.com/video/{bv_id}'
    # 把python代码伪装成浏览器  ---> 在开发者工具里面直接复制粘贴
    headers = {
        # 防盗链
        'referer': 'https://www.bilibili.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)
    audio_url = json_data['data']['dash']['audio'][0]['baseUrl']
    video_url = json_data['data']['dash']['video'][0]['baseUrl']
    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)
    return title

功能二

这个功能,前段时间已经发布过相关的文章教程

请看这里:用Python获取弹幕的两种方式(一种简单但量少,另一量大管饱)

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.ibilibili.com/video/{bv_id}/'
    html_data = get_response(link).text
    Dm_url = re.findall('<a href="(.*?)" rel="external nofollow"   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)

功能三

单页少量的数据很简单,但要想翻页,必须分析网站,找到规律

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.bilibili.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://api.bilibili.com/x/v2/reply/main'
    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

到此这篇关于Python+tkinter实现网站下载工具的文章就介绍到这了,更多相关Python tkinter网站下载工具内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 用Python自动下载网站所有文件

    最近维基 jie mi 彻底公开了网站的全部文件,我就在想如何使用 Python 将其下载到本地永久保存,于是就有了这篇文章,写爬虫会遇到很多坑,借鉴他人经验,考虑越全面,出错的概率就越小. 假如一个网站,里面有很多链接,有指向文件的,有指向新链接的,新的链接点击进去后,仍然是有指向文件的,有指向新链接的,类似一个文件夹,里面即有文件,又有目录,目录中又有文件和目录.如何从这样的网站上下载所有的文件,并按网站的目录结构来保存这些文件呢? 关键词:Python.下载.正则表达式.递归. 按照自顶向

  • python 爬取影视网站下载链接

    项目地址: https://github.com/GriffinLewis2001/Python_movie_links_scraper 运行效果 导入模块 import requests,re from requests.cookies import RequestsCookieJar from fake_useragent import UserAgent import os,pickle,threading,time import concurrent.futures from goto

  • python基于tkinter制作m3u8视频下载工具

    这是我为了学习tkinter用python 写的一个下载m3u8视频的小程序,程序使用了多线程下载,下载后自动合并成一个视频文件,方便播放. 目前的众多视频都是m3u8的播放类型,只要知道视频的m3u8地址,就可以完美下载整个视频. m3u8地址获取 打开浏览器,点开你要获取地址的视频 重要的来了,右键>>审查元素或者按F12也可以 根据开发或测试的实际环境选择相应的设备,选择iphone6 plus 选择好了以后,刷新页面,点击漏斗,选择media,一定刷新之后再点击,没出来的话切换几下选项

  • python 制作网站小说下载器

    基本开发环境 · Python 3.6 · Pycharm 相关模块使用 目标网页分析 输入想看的小说内容,点击搜索 这里会返回很多结果,我只选择第一个 网页数据是静态数据,但是要搜索,是post请求,需要提价data参数,如下图所示: 然后通过解析网站数据,获取第一个小说i的详情页url即可 静态网页的获取,难度是不大的. def search():     search_url = 'http://www.xbiquge.la/modules/article/waps.php'     da

  • Python+tkinter实现音乐下载软件的制作

    目录 前言 效果展示 代码部分 前言 平常我们下载的歌曲,都是各种妖魔鬼怪的格式横行,想下载下来用一下都不行,还只能在它的播放器内听,这谁受得了~ 学Python是用来干嘛的? 当然是解决问题咯~ 于是我直接写了一手音乐下载软件,强制全部保存mp3,这样就没有限制了~ 什么?还要马内?不存在的,别慌,保证全部都能下载! 效果展示 这是我们今天要写的软件界面 然后我们选一首歌 高跟鞋看起来要马内,就它了~ 好有道理,我竟然无言以对~ 跑题了… 输入音乐ID 点击下载 看看下载好了 我们可以把这个文

  • python基于tkinter制作无损音乐下载工具(附源码)

    继续写GUI,本次依然使用Tkinter设计一款图形界面,使用Tkinter做一款音乐下载软件,听起来听平常的,但是我这款软件能够下载 无损音乐下载软件,听起来不错吧,Let`s go! 一.准备工作 python Tkinter 二.预览 1.搜索 2.下载 3.结果 无损音乐就这样下载完了. 三.详细设计 这里仅展示我设计的整体思路. 四.源代码 4.1 Music_Search-v1.0.py from tkinter import * from tkinter import ttk fr

  • Python+tkinter实现网站下载工具

    目录 前言 开发环境 本次项目案例步骤 先展示下完成品的效果 界面 导入模块 先创建个窗口 功能按键 主要功能代码编写 功能一 功能二 功能三 前言 最近很多同学想问我,怎么把几个代码的功能集合到一起? 很简单,写一个界面就行了,想要哪个代码运行,鼠标轻轻一点就行 开发环境 python 3.8: 解释器 pycharm: 代码编辑器 本次项目案例步骤 1.先确定想要的功能,今天这个项目的主要功能为三个 视频 评论 弹幕 2.创建一个简单的用户交互界面,简洁明了 先展示下完成品的效果 界面 导入

  • Python+Tkinter打造签名设计工具

    目录 1.概述 2.网页分析 1)网页缺陷 2)页面分析 3)数据的获取 3.完整代码 4.总结 1.概述 前面我们已经详细的介绍了,怎么使用Tkinter创建属于自己的窗口界面了.整体布局呢我们已经搭建起来,唯一没有实现的一个步骤就是,用户每输入一个名字,就会将个性签名一并显示在这个窗口界面中,今天我就带着大家一起完成这个需求. 今天的文章可以看成是爬虫+Tkinter窗口的结合.昨天我们完成了Tkinter窗口搭建过程,今天需要做的就是利用爬虫得到我们最终想要的个性化签名.网上在线签名网站特

  • python tkinter实现下载进度条及抖音视频去水印原理

    tkinter下载进度条 利用python爬取网站数据进行下载时,显示下载进度 # 设置下载进度条 tk.Label(window, text='下载进度:').place(x=40, y=80) canvas = tk.Canvas(window, width=600, height=16, bg="white") canvas.place(x=20, y=90) # 下载按钮函数 def usr_download(): response = session.get(url_str,

  • python gui开发——制作抖音无水印视频下载工具(附源码)

    hello,大家好啊,失踪人口回归了 [捂脸]!本次使用tkinter撰写一篇 抖音无水印视频下载,目的很纯粹,就是为了设置 微信状态视频.本篇博文中,我会写下我的代码撰写思路以及想写设计流程,代码放在了第四节,工具打包好放在了 蓝奏云,慢慢看,后面有链接. 一.准备工作 本次要用到以下依赖库:re json os random tkinter threading requests pillow 其中后两个需要安装后使用 二.预览 0.复制抖音分享短链接 1.启动 2.运行 3.结果 (小姐姐挺

  • python基于tkinter制作下班倒计时工具

    你有过摸鱼时间吗 在互联网圈子里,常常说996上班制,但是也不乏965的,更甚有007的,而007则就有点ICU的感觉了,所以,大家都会忙里偷闲,偶尔摸摸鱼,摸鱼的方式多种多样的,你有过上班摸鱼吗?你的摸鱼时间都干了些什么呢?如果你早早的完成了当天的任务,坐等下班的感觉是不是很爽呢?我想说这时间还是很难熬的,还不如找点事情做来得快呢,那做点什么呢?写个下班倒计时吧,就这么愉快的决定了-- 实现思路 倒计时的时间刷新,肯定得需要图形界面,也就是需要GUI编程,这里我用的是tkinter实现本地窗口

  • Python+Tkinter制作在线个性签名工具

    目录 一.首先确定GUI界面: 二.爬取我们需要的内容 三.完整代码 思路:先选择在线签名网站,找到接口模拟请求,然后将生成的签名图片显示在 Tkinter 生成的 GUI 窗口上,最后保存生成的签名图片 选择网址为:http://www.uustv.com/ 首先了解爬虫的基本步骤: 发起请求 :即发送一个Request,可能包含额外的headers,data等信息 获取响应内容 :得到网页的HTML文件内容 解析内容:可以使用正则表达式提取出想要的内容 保存数据:将数据存为文本,或mp3,m

  • Python tkinter实现的图片移动碰撞动画效果【附源码下载】

    本文实例讲述了Python tkinter实现的图片移动碰撞动画效果.分享给大家供大家参考,具体如下: 先来看看运行效果: 具体代码如下: #!/usr/bin/python # -*- coding: utf-8 -*- import time try: from tkinter import * except ImportError: #Python 2.x PythonVersion = 2 from Tkinter import * from tkFont import Font fro

随机推荐