【我的创作纪念日】关于某站的音频爬虫+GUI

这篇具有很好参考价值的文章主要介绍了【我的创作纪念日】关于某站的音频爬虫+GUI。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、前言&机遇

许久没看私信内容,一上线就看到了官方的私信,我已经来到CSDN1024天啦!

想到注册这个号的初衷是学习记录爬虫,后面渐渐变成了各种学习笔记。

勿忘初心,今天补写一篇爬虫文章,纪念一下(嘿嘿)

GitHub项目地址:https://github.com/Polaris119/Audio-crawler


二、爬虫代码

由于一些原因,关于某站的爬虫,基础不能细🔒。大家看代码吧。

import requests
import re  
import json
import os


"""
根据bv号和自定义文件名得到filename、url、headers
    bv:视频bv号
    name:自己给待下载文件取的名字
"""


def bv_name(bv, name):
    if not os.path.exists("D:/video"):
        os.mkdir("D:/video")

    fileName = f"D:/video/{name}"
    URL = f'https://www.bilibili.com/video/{bv}'

    headers = {
        'referer': f'https://www.bilibili.com/video/{bv}?spm_id_from=333.337.search-card.all.click',
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36'
    }

    return fileName, URL, headers


"""
获取网页源代码
    url:网页链接
    headers:请求头
"""


def send_request(url, headers):
    response = requests.get(url=url, headers=headers)
    return response


"""
解析视频数据
html_data:页面源代码,相当于上个函数response.text
"""


def get_video_data(html_data):
    # 提取视频对应的json数据
    # <script>window\.__playinfo__=(.*?)</script>是在网络上找的,随便百度都找的到
    json_data = re.findall('<script>window\.__playinfo__=(.*?)</script>', html_data)[0]
    json_data = json.loads(json_data)
    
    # 提取音频的url地址
    audio_url = json_data['data']['dash']['audio'][0]['backupUrl'][0]
    return audio_url


"""
下载音频
file_name:待下载文件地址
audio_url:音频文件在网页中的地址
headers:请求头
"""


def save_data(file_name, audio_url, headers):
    # 请求数据
    audio_data = send_request(audio_url, headers).content
    with open(file_name + '.mp3', mode='wb') as f:
        f.write(audio_data)
    # print("音频下载完毕!!!")
    
    
"""
测试使用,可以注释掉。GUI界面会调用之前的函数
"""
# if __name__ == '__main__':
#     filename, URL, headers = bv_name('BV1t14y1F7kd', '英文歌')
#     res = send_request(URL, headers).text
#     video = get_video_data(res)
#     print(video)

三、爬虫GUI

可视化才够爽!!!

【我的创作纪念日】关于某站的音频爬虫+GUI,网络爬虫,爬虫,python,pyqt5

  • GUI代码如下:
from PyQt5.Qt import *
from audio_spider import *
import sys
import time


class WorkerThread(QThread):
    # 自定义信号,传递两个字符串参数
    finish = pyqtSignal(str, str)

    def __init__(self, parent=None):
        super(WorkerThread, self).__init__(parent)
        self.text1 = None
        self.text2 = None

    def run(self):
        # 调用audio_spider.py的函数
        filename, url, headers = bv_name(self.text1, self.text2)
        res = send_request(url, headers).text
        video = get_video_data(res)  # 音频地址
        start_time = time.time()  # 下载开始时间
        save_data(filename, video, headers)
        end_time = time.time()  # 下载结束时间

        value1 = video  # 音频地址
        value2 = "下载完成咯!!!用时" + str(round(end_time - start_time, 2)) + '秒'  # 下载用时,保留两位小数
        self.finish.emit(value1, value2)  # 发射信号,传递结果给主线程


class mainwindow(QWidget):

    def __init__(self):
        super(mainwindow, self).__init__()
        self.windowUI()
        self.setWindowTitle("B站音频提取")
        self.resize(1000, 1000)

    def windowUI(self):
        palette = QPalette()
        pix = QPixmap("./file/background.jpg")

        pix = pix.scaled(self.width(), self.height())

        palette.setBrush(QPalette.Background, QBrush(pix))
        self.setPalette(palette)

        label_1 = QLabel(self)
        label_1.move(400, 70)
        label_1.setText("B站音频提取")
        label_1.setFont(QFont('SimHei', 20))

        label_2 = QLabel(self)
        label_2.move(500, 900)
        label_2.setText("数据来源:Bilibili")

        label_3 = QLabel(self)
        label_3.move(800, 900)
        label_3.setText("作者:Polaris")
        # label_3.setFont(QFont('Arial', 0))

        label_4 = QLabel(self)
        label_4.move(200, 200)
        label_4.setText("输入BV号")
        label_4.setFont(QFont('SimSun', 20, 75))

        label_5 = QLabel(self)
        label_5.move(200, 300)
        label_5.setText("输入文件名")
        label_5.setFont(QFont('SimSun', 20, 75))

        label_6 = QLabel(self)
        label_6.move(200, 480)
        label_6.setText("音频地址")
        label_6.setFont(QFont('SimSun', 20, 75))

        label_7 = QLabel(self)
        label_7.move(200, 680)
        label_7.setText("下载用时")
        label_7.setFont(QFont('SimSun', 20, 75))

        self.line_1 = QLineEdit(self)  # BV号
        self.line_1.resize(200, 40)
        self.line_1.move(430, 200)

        self.line_2 = QLineEdit(self)  # 文件名
        self.line_2.resize(200, 40)
        self.line_2.move(430, 300)

        self.text_1 = QTextEdit(self)  # 音频地址
        self.text_1.move(430, 400)

        self.text_2 = QTextEdit(self)  # 下载进度
        self.text_2.move(430, 600)

        self.btn = QPushButton('立即下载', self)
        self.btn.setFont(QFont('SimSun', 10, 75))
        self.btn.resize(150, 80)
        self.btn.move(750, 235)

        # 在 mainwindow 类的构造函数中创建了一个 WorkerThread 对象(在主线程中创建一个子线程对象)
        self.worker_thread = WorkerThread()
        # 绑定按钮事件
        self.btn.clicked.connect(self.start_thread)
        # 将子线程的 finish 信号连接到主线程的 value_change 槽函数上
        self.worker_thread.finish.connect(self.value_change)

    def start_thread(self):
        # 获取文本框内容
        self.worker_thread.text1 = self.line_1.text()
        self.worker_thread.text2 = self.line_2.text()
        # 我们使用 moveToThread 方法将 worker_thread 移动到一个新的线程中(即子线程中)
        # 将主线程中text1、text2的值传递到子线程中
        self.worker_thread.moveToThread(self.worker_thread)
        # 启动子线程
        self.worker_thread.start()

    def value_change(self, value1, value2):
        # 在槽函数中获取子线程传递的结果,并进行处理
        self.text_1.setText(value1)
        self.text_2.setPlainText(value2)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    a = mainwindow()
    a.show()
    sys.exit(app.exec_())

四、文件打包

给不懂代码的小伙伴用一用,说不定就骗到一个入坑的(doge

可以参考我的这篇文章:pyinstaller多文件打包exe

五、结果展示

两小时的音频只需3秒哦!!!!
【我的创作纪念日】关于某站的音频爬虫+GUI,网络爬虫,爬虫,python,pyqt5

未来可期

文章到这里就要结束了,但故事还没有结局

如果本文对你有帮助,记得点个赞👍哟,也是对作者最大的鼓励🙇‍♂️。

如有不足之处可以在评论区👇多多指正,我会在看到的第一时间进行修正

作者:爱打瞌睡的CV君
CSDN:https://blog.csdn.net/qq_44921056
本文仅用于交流学习,未经作者允许,禁止转载,更勿做其他用途,违者必究。文章来源地址https://www.toymoban.com/news/detail-518313.html

到了这里,关于【我的创作纪念日】关于某站的音频爬虫+GUI的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 我的1827创作纪念日

    习惯性早上打开电脑,看看CSDN上的资讯,了解行业动态、当前新的技术和大佬的分享。自己动手写应该是2019 年 01 月 08 日,当时应该是在用安装和使用Oracle,遇到一些问题,写下第一篇博客 Oracle存储过程常见问题及解决方法,转眼已过去五年,同时也是参加工作的第五年,

    2024年01月16日
    浏览(44)
  • 我的创作纪念日——512

    没想到不知不觉在CSDN创作就 512 天了,想到一开始就仅仅想在CSDN记笔记,到现在成为一个小博主,认识到了很多志同道合的伙伴,中间创作我也曾经懒惰过,放弃过,但我一次又一次重新进行创作,虽然我是上了大学才开始了解程序员,成为程序员(可能现在还不合格),但

    2024年02月11日
    浏览(51)
  • 我的创作纪念日(划水...)

    提示:可以和大家分享最初成为创作者的初心 例如: 实战项目中的经验分享 日常学习过程中的记录 通过文章进行技术交流 … 提示:在创作的过程中都有哪些收获 例如: 获得了多少粉丝的关注 获得了多少正向的反馈,如赞、评论、阅读量等 认识和哪些志同道合的领域同行

    2023年04月25日
    浏览(52)
  • 我的创作纪念日-哈市雪花

    2018年4月13写了第一篇博客,在此之前也在用CSDN,但更多的是查阅资料,学习技术。在这之前也写过技术文章,记得最开始是在知乎上发表的,终于那一天在微博上看到大佬转换笑脸动画表情的实现思路,一时兴起用WPF实现了下,然后把文章发表在了CSDN上。 文章总是有意义的

    2023年04月16日
    浏览(43)
  • 我的创作纪念日(256天)

    我与csdn的结缘,之前在创作纪念日(128天)便已提到,今在此便不再多言 很惭愧,自六月底至八月中旬,因为忙于找工作,奔赴面试求职之际,写博客没有像之前那么勤, 但也创作了12篇博客,有幸获得1500位粉丝的关注 。其中仅有两篇博客进入热榜,最近一篇文章《Git:在

    2024年02月12日
    浏览(51)
  • 创作纪念日-我的第1024天

    不知不觉已经成为创作者的第1024天啦… … 刚开始接触博客的初衷就是为了记笔记📒、记总结📝,或许对于当时就等同于是为了找工作。 坚持学习并持续输出博客一年后,这时我发现再写博客,不在是为了找一份工作,已经变成一种习惯!一种成长型心态! 接着一年、两年

    2024年02月10日
    浏览(39)
  • 我的创作纪念日(128天)

    今天,我像往常一样打开CSDN 网站,随即弹出的两则官方私信: 我这才意识到,从去年的11月27日到现在,时光荏苒,已是128天之久。 下面我向各位看分享一下我在CSDN创作的经历和收获,以及我的一些个人感受。(ps:故事有点长严`( ﹏ )′) 我最早接触CSDN社区,起始于201

    2023年04月22日
    浏览(42)
  • 【人生历程】我的创作纪念日

    目录 与编程不得不说的爱恨情仇 在csdn的收获: 与csdn的日常 在平凡的日子偶然的成就感: 对未来的憧憬: 今天是2023.4.8号,早上的刚刚参加完蓝桥杯,下午看到csdn官方的活动,心血来潮写下以下内容,如有不适或者错误请见谅。 在2021我成功摆脱了高中生这个身份,我称为

    2023年04月09日
    浏览(42)
  • 我的创作纪念日(730天)

    不知不觉来到CSDN已经730天了,这两年来我收获丰富,从原本的只是从CSDN获取知识,到现在的传播知识,我感觉受益良多,一年多的沉淀,让我在这三个月中绽放,粉丝也从原本的两位数到现在的四千+,学习中记笔记是我养成的习惯,自己总结的东西总觉得很适合自己记忆。

    2024年01月17日
    浏览(45)
  • 我的创作纪念日——创作历程,机缘,与成就

    作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。   座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​ 目录  写在前面  一.机缘 二.收获 三.日常 四.成就  五.憧憬与规划 六.分享 大家好~我是网络豆,不知不觉已经在CSDN创作有一年

    2024年02月09日
    浏览(40)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包