国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【我的創(chuàng)作紀念日】關(guān)于某站的音頻爬蟲+GUI

這篇具有很好參考價值的文章主要介紹了【我的創(chuàng)作紀念日】關(guān)于某站的音頻爬蟲+GUI。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一、前言&機遇

許久沒看私信內(nèi)容,一上線就看到了官方的私信,我已經(jīng)來到CSDN1024天啦!

想到注冊這個號的初衷是學(xué)習(xí)記錄爬蟲,后面漸漸變成了各種學(xué)習(xí)筆記。

勿忘初心,今天補寫一篇爬蟲文章,紀念一下(嘿嘿)

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


二、爬蟲代碼

由于一些原因,關(guān)于某站的爬蟲,基礎(chǔ)不能細??。大家看代碼吧。

import requests
import re  
import json
import os


"""
根據(jù)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


"""
獲取網(wǎng)頁源代碼
    url:網(wǎng)頁鏈接
    headers:請求頭
"""


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


"""
解析視頻數(shù)據(jù)
html_data:頁面源代碼,相當(dāng)于上個函數(shù)response.text
"""


def get_video_data(html_data):
    # 提取視頻對應(yīng)的json數(shù)據(jù)
    # <script>window\.__playinfo__=(.*?)</script>是在網(wǎng)絡(luò)上找的,隨便百度都找的到
    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:音頻文件在網(wǎng)頁中的地址
headers:請求頭
"""


def save_data(file_name, audio_url, headers):
    # 請求數(shù)據(jù)
    audio_data = send_request(audio_url, headers).content
    with open(file_name + '.mp3', mode='wb') as f:
        f.write(audio_data)
    # print("音頻下載完畢?。?!")
    
    
"""
測試使用,可以注釋掉。GUI界面會調(diào)用之前的函數(shù)
"""
# if __name__ == '__main__':
#     filename, URL, headers = bv_name('BV1t14y1F7kd', '英文歌')
#     res = send_request(URL, headers).text
#     video = get_video_data(res)
#     print(video)

三、爬蟲GUI

可視化才夠爽?。?!

【我的創(chuàng)作紀念日】關(guān)于某站的音頻爬蟲+GUI,網(wǎng)絡(luò)爬蟲,爬蟲,python,pyqt5

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


class WorkerThread(QThread):
    # 自定義信號,傳遞兩個字符串參數(shù)
    finish = pyqtSignal(str, str)

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

    def run(self):
        # 調(diào)用audio_spider.py的函數(shù)
        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()  # 下載結(jié)束時間

        value1 = video  # 音頻地址
        value2 = "下載完成咯?。。∮脮r" + str(round(end_time - start_time, 2)) + '秒'  # 下載用時,保留兩位小數(shù)
        self.finish.emit(value1, value2)  # 發(fā)射信號,傳遞結(jié)果給主線程


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("數(shù)據(jù)來源: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 類的構(gòu)造函數(shù)中創(chuàng)建了一個 WorkerThread 對象(在主線程中創(chuàng)建一個子線程對象)
        self.worker_thread = WorkerThread()
        # 綁定按鈕事件
        self.btn.clicked.connect(self.start_thread)
        # 將子線程的 finish 信號連接到主線程的 value_change 槽函數(shù)上
        self.worker_thread.finish.connect(self.value_change)

    def start_thread(self):
        # 獲取文本框內(nèi)容
        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):
        # 在槽函數(shù)中獲取子線程傳遞的結(jié)果,并進行處理
        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

五、結(jié)果展示

兩小時的音頻只需3秒哦?。。?!
【我的創(chuàng)作紀念日】關(guān)于某站的音頻爬蟲+GUI,網(wǎng)絡(luò)爬蟲,爬蟲,python,pyqt5

未來可期

文章到這里就要結(jié)束了,但故事還沒有結(jié)局

如果本文對你有幫助,記得點個贊??喲,也是對作者最大的鼓勵???♂?。

如有不足之處可以在評論區(qū)??多多指正,我會在看到的第一時間進行修正

作者:愛打瞌睡的CV君
CSDN:https://blog.csdn.net/qq_44921056
本文僅用于交流學(xué)習(xí),未經(jīng)作者允許,禁止轉(zhuǎn)載,更勿做其他用途,違者必究。文章來源地址http://www.zghlxwxcb.cn/news/detail-518313.html

到了這里,關(guān)于【我的創(chuàng)作紀念日】關(guān)于某站的音頻爬蟲+GUI的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 我的1827創(chuàng)作紀念日

    我的1827創(chuàng)作紀念日

    習(xí)慣性早上打開電腦,看看CSDN上的資訊,了解行業(yè)動態(tài)、當(dāng)前新的技術(shù)和大佬的分享。自己動手寫應(yīng)該是2019 年 01 月 08 日,當(dāng)時應(yīng)該是在用安裝和使用Oracle,遇到一些問題,寫下第一篇博客 Oracle存儲過程常見問題及解決方法,轉(zhuǎn)眼已過去五年,同時也是參加工作的第五年,

    2024年01月16日
    瀏覽(19)
  • 我的創(chuàng)作紀念日(劃水...)

    提示:可以和大家分享最初成為創(chuàng)作者的初心 例如: 實戰(zhàn)項目中的經(jīng)驗分享 日常學(xué)習(xí)過程中的記錄 通過文章進行技術(shù)交流 … 提示:在創(chuàng)作的過程中都有哪些收獲 例如: 獲得了多少粉絲的關(guān)注 獲得了多少正向的反饋,如贊、評論、閱讀量等 認識和哪些志同道合的領(lǐng)域同行

    2023年04月25日
    瀏覽(32)
  • 我的創(chuàng)作紀念日——512

    我的創(chuàng)作紀念日——512

    沒想到不知不覺在CSDN創(chuàng)作就 512 天了,想到一開始就僅僅想在CSDN記筆記,到現(xiàn)在成為一個小博主,認識到了很多志同道合的伙伴,中間創(chuàng)作我也曾經(jīng)懶惰過,放棄過,但我一次又一次重新進行創(chuàng)作,雖然我是上了大學(xué)才開始了解程序員,成為程序員(可能現(xiàn)在還不合格),但

    2024年02月11日
    瀏覽(20)
  • 【人生歷程】我的創(chuàng)作紀念日

    【人生歷程】我的創(chuàng)作紀念日

    目錄 與編程不得不說的愛恨情仇 在csdn的收獲: 與csdn的日常 在平凡的日子偶然的成就感: 對未來的憧憬: 今天是2023.4.8號,早上的剛剛參加完藍橋杯,下午看到csdn官方的活動,心血來潮寫下以下內(nèi)容,如有不適或者錯誤請見諒。 在2021我成功擺脫了高中生這個身份,我稱為

    2023年04月09日
    瀏覽(30)
  • 我的創(chuàng)作紀念日-哈市雪花

    2018年4月13寫了第一篇博客,在此之前也在用CSDN,但更多的是查閱資料,學(xué)習(xí)技術(shù)。在這之前也寫過技術(shù)文章,記得最開始是在知乎上發(fā)表的,終于那一天在微博上看到大佬轉(zhuǎn)換笑臉動畫表情的實現(xiàn)思路,一時興起用WPF實現(xiàn)了下,然后把文章發(fā)表在了CSDN上。 文章總是有意義的

    2023年04月16日
    瀏覽(26)
  • 我的創(chuàng)作紀念日(256天)

    我的創(chuàng)作紀念日(256天)

    我與csdn的結(jié)緣,之前在創(chuàng)作紀念日(128天)便已提到,今在此便不再多言 很慚愧,自六月底至八月中旬,因為忙于找工作,奔赴面試求職之際,寫博客沒有像之前那么勤, 但也創(chuàng)作了12篇博客,有幸獲得1500位粉絲的關(guān)注 。其中僅有兩篇博客進入熱榜,最近一篇文章《Git:在

    2024年02月12日
    瀏覽(28)
  • 我的創(chuàng)作紀念日(128天)

    我的創(chuàng)作紀念日(128天)

    今天,我像往常一樣打開CSDN 網(wǎng)站,隨即彈出的兩則官方私信: 我這才意識到,從去年的11月27日到現(xiàn)在,時光荏苒,已是128天之久。 下面我向各位看分享一下我在CSDN創(chuàng)作的經(jīng)歷和收獲,以及我的一些個人感受。(ps:故事有點長嚴`( ﹏ )′) 我最早接觸CSDN社區(qū),起始于201

    2023年04月22日
    瀏覽(25)
  • 創(chuàng)作紀念日-我的第1024天

    創(chuàng)作紀念日-我的第1024天

    不知不覺已經(jīng)成為創(chuàng)作者的第1024天啦… … 剛開始接觸博客的初衷就是為了記筆記??、記總結(jié)??,或許對于當(dāng)時就等同于是為了找工作。 堅持學(xué)習(xí)并持續(xù)輸出博客一年后,這時我發(fā)現(xiàn)再寫博客,不在是為了找一份工作,已經(jīng)變成一種習(xí)慣!一種成長型心態(tài)! 接著一年、兩年

    2024年02月10日
    瀏覽(24)
  • 我的創(chuàng)作紀念日(730天)

    不知不覺來到CSDN已經(jīng)730天了,這兩年來我收獲豐富,從原本的只是從CSDN獲取知識,到現(xiàn)在的傳播知識,我感覺受益良多,一年多的沉淀,讓我在這三個月中綻放,粉絲也從原本的兩位數(shù)到現(xiàn)在的四千+,學(xué)習(xí)中記筆記是我養(yǎng)成的習(xí)慣,自己總結(jié)的東西總覺得很適合自己記憶。

    2024年01月17日
    瀏覽(29)
  • 我的創(chuàng)作紀念日——創(chuàng)作歷程,機緣,與成就

    我的創(chuàng)作紀念日——創(chuàng)作歷程,機緣,與成就

    作者簡介:一名云計算網(wǎng)絡(luò)運維人員、每天分享網(wǎng)絡(luò)與運維的技術(shù)與干貨。? ?座右銘:低頭趕路,敬事如儀 個人主頁:網(wǎng)絡(luò)豆的主頁????? 目錄 ?寫在前面 ?一.機緣 二.收獲 三.日常 四.成就 ?五.憧憬與規(guī)劃 六.分享 大家好~我是網(wǎng)絡(luò)豆,不知不覺已經(jīng)在CSDN創(chuàng)作有一年

    2024年02月09日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包