您好,登錄后才能下訂單哦!
今天小編給大家分享一下怎么使用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實現網站下載工具”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。