python批量下載抖音視頻
本文實例為大家分享了python批量下載抖音視頻的具體代碼,供大家參考,具體內容如下
知識儲備:博主是在Pycharm下進行的
文件夾:dou_ying
1、在文件夾doy_ying下新建第一個文件:dou_ying_video_download.py
代碼:
# coding=utf-8 """ @author: jiajiknag 程序功能:批量下載抖音視頻 """ import requests import bs4 import os import json import re import sys import time # 如果一個對象沒有實現(xiàn)上下文,我們就不能把它用于with語句。這個時候,可以用closing()來把該對象變?yōu)樯舷挛膶ο蟆? # closing-將任意對象變?yōu)樯舷挛膶ο?,并支持with語句。 from contextlib import closing # Urllib3是一個功能強大,條理清晰,用于HTTP客戶端的Python庫 # urllib3.disable_warnings()禁用urllib3警告的方法 requests.packages.urllib3.disable_warnings() # 創(chuàng)建類Sipder() class Spider(): def __init__(self): # UA對照表:https://blog.csdn.net/time888/article/details/72822729 self.headers = { # 用戶代理:用于瀏覽器識別的,可以看出自己系統(tǒng)版本,瀏覽器,瀏覽器內核等 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36' } # 輸出信息-視頻信息 print('[INFO]:Douyin(抖音) App Video downloader...') print('[Version]: V1.0') print('[Author]: Jiajikang') # 創(chuàng)建函數(shù)run():外部調用運行 def run(self): # 輸入ID地址(爬去某人抖音視頻的抖音號) user_id = input('Enter the ID:') try: # 因為抖音號是數(shù)字所以使用int()驗證是否是數(shù)字 int(user_id) # 輸入錯誤時輸出except下的語句 except: print('[Error]:ID error...') return video_names, video_urls, nickname = self._parse_userID(user_id) # os.listdir()方法用于返回指定的文件夾包含的文件或文件夾的名字的列表 if nickname not in os.listdir(): # os.mkdir() 方法用于以數(shù)字權限模式創(chuàng)建目錄 os.mkdir(nickname) print('[INFO]:Number of Videos <%s>' % len(video_urls)) for num in range(len(video_names)): # %d是一個占位符,標識一個字符串型的數(shù)據(jù), %s也是一個占位符,標識一個字符串型的數(shù)據(jù) print('[INFO]:Parsing <No.%d> <Url:%s>' % (num+1, video_urls[num])) temp = video_names[num].replace('\\', '') video_name = temp.replace('/', '') # 調用函數(shù)_downloader() self._downloader(video_urls[num], os.path.join(nickname, video_name)) print('\n') print('[INFO]:All Done...') # 創(chuàng)建函數(shù)_downloader()并含有參數(shù):路徑和視頻的url-視頻下載 def _downloader(self, video_url, path): # 定義size并初始化為0 size = 0 # 定義一個變量download_url:利用函數(shù)_get_download_url()來獲取視頻url download_url = self._get_download_url(video_url) with closing(requests.get(download_url, headers=self.headers, stream=True, verify=False)) as response: chunk_size = 1024 content_size = int(response.headers['content-length']) if response.status_code == 200: sys.stdout.write('[File Size]: %0.2f MB\n' % (content_size/chunk_size/1024)) # 使用寫入的方式打開,如果該文件已存在則將其覆蓋。如果該文件不存在,創(chuàng)建新文件。 with open(path, 'wb') as f: # 遍歷獲取數(shù)據(jù) for data in response.iter_content(chunk_size=chunk_size): # 向文件中寫入指定的字符串data f.write(data) # 計算寫入字符串的長度 size += len(data) # flush() 方法是用來刷新緩沖區(qū)的,即將緩沖區(qū)中的數(shù)據(jù)立刻寫入文件,同時清空緩沖區(qū),不需要是被動的等待輸出緩沖區(qū)寫入。 f.flush() sys.stdout.write('[Progress]: %0.2f%%' % float(size/content_size*100) + '\r') sys.stdout.flush() # 創(chuàng)建函數(shù)_get_download_url()并含有形參video_url:獲得視頻下載地址 def _get_download_url(self, video_url): # 獲取視頻的下載地址 # Requests 可以為 HTTPS 請求驗證 SSL 證書,就像 web 瀏覽器一樣。要想檢查某個主機的 SSL 證書,你可以使用 verify 參數(shù): # 定義變量res用來接收視頻地址,verify 僅應用于主機證書 res = requests.get(url=video_url, verify=False) # 將res.text 文件利用'lxml'解析成xml文件,了解lxml--https://blog.csdn.net/tanzuozhev/article/details/50442243 soup = bs4.BeautifulSoup(res.text, 'lxml') # 使用find_all來獲取網(wǎng)頁中JavaScript中的script的變量;[-1]去除最后一個字符 script = soup.find_all('script')[-1] # 定義變量date=正則表達式\[(.+)]\,[0]可以使其返回一個字典 video_url_js = re.findall('var data = \[(.+)\];', str(script))[0] # 使用loads()下載 html = json.loads(video_url_js) # 返回,使用[0]是返回一個字典 return html['video']['play_addr']['url_list'][0] # 定義函數(shù)_parse_userID()且形參user_id;通過user_id獲取該用戶發(fā)布的所有視頻 def _parse_userID(self, user_id): # 獲取所有視頻 video_names = [] video_urls = [] unique_id = '' # 當獲取的id不是用戶的id時: while unique_id != user_id: # 獲取url-下載 search_url = 'https://api.amemv.com/aweme/v1/discover/search/?keyword={}&count=10&type=1&aid=1128'.format(user_id) res = requests.get(url=search_url, verify=False) res_dic = json.loads(res.text) uid = res_dic['user_list'][0]['user_info']['uid'] aweme_count = res_dic['user_list'][0]['user_info']['aweme_count'] nickname = res_dic['user_list'][0]['user_info']['nickname'] unique_id = res_dic['user_list'][0]['user_info']['unique_id'] # 用戶的url user_url = 'https://www.douyin.com/aweme/v1/aweme/post/?user_id={}&max_cursor=0&count={}'.format(uid, aweme_count) # 請求獲取用戶的url res = requests.get(url=user_url, verify=False) # 下載后去的url轉換的文本 res_dic = json.loads(res.text) i = 1 # 遍歷下載的文本 for each in res_dic['aweme_list']: share_desc = each['share_info']['share_desc'] if '抖音-原創(chuàng)音樂短視頻社區(qū)' == share_desc: video_names.append(str(i) + '.mp4') i += 1 else: video_names.append(share_desc + '.mp4') video_urls.append(each['share_info']['share_url']) return video_names, video_urls, nickname """ if __name__ == '__main__': # 創(chuàng)建對象 sp = Spider() sp.run() """
溫馨提示: 有些庫是要自己去下載,一般使用命令在提示符下輸入:pip install 自己要下載的庫,如下圖是博主下載的。
2、在文件夾doy_ying下新建第二個文件:run.py
代碼:
# coding=utf-8 """ @author: jiajiknag 程序功能: 測試抖音視頻的下載 """ from dou_ying_video_download import Spider if __name__ == '__main__': # 創(chuàng)建類Spider()對象 sp = Spider() # 運行開始下載 sp.run()
3、結果
這是我在抖音中隨便找的一個發(fā)布抖音視頻比較少的來測試一下,以及我還下載了自己的抖音
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
Python實現(xiàn)指定范圍內篩選并剔除Excel表格中的數(shù)據(jù)
這篇文章主要為大家詳細介紹了Python如何實現(xiàn)在指定范圍內篩選并剔除Excel表格中的數(shù)據(jù),文中的示例代碼講解詳細,感興趣的可以了解一下2023-06-06Python機器學習算法之決策樹算法的實現(xiàn)與優(yōu)缺點
決策樹(Decision Tree)是一種基本的分類與回歸方法,這篇文章主要給大家介紹了關于Python機器學習算法之決策樹算法實現(xiàn)與優(yōu)缺點的相關資料,需要的朋友們下面隨著小編來一起學習學習吧2021-05-05python去除刪除數(shù)據(jù)中\(zhòng)u0000\u0001等unicode字符串的代碼
這篇文章主要介紹了python去除刪除數(shù)據(jù)中\(zhòng)u0000\u0001等unicode字符串的代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03python的ImageTk.PhotoImage大坑及解決
這篇文章主要介紹了python的ImageTk.PhotoImage大坑及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-11-11