最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python批量下載抖音視頻

 更新時(shí)間:2019年06月17日 14:50:00   作者:賈繼康  
這篇文章主要為大家詳細(xì)介紹了python批量下載抖音視頻,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了python批量下載抖音視頻的具體代碼,供大家參考,具體內(nèi)容如下

知識(shí)儲(chǔ)備:博主是在Pycharm下進(jìn)行的
文件夾:dou_ying

1、在文件夾doy_ying下新建第一個(gè)文件:dou_ying_video_download.py

代碼:

# coding=utf-8
"""
@author: jiajiknag
程序功能:批量下載抖音視頻
"""
import requests
import bs4
import os
import json
import re
import sys
import time
# 如果一個(gè)對(duì)象沒有實(shí)現(xiàn)上下文,我們就不能把它用于with語句。這個(gè)時(shí)候,可以用closing()來把該對(duì)象變?yōu)樯舷挛膶?duì)象。
# closing-將任意對(duì)象變?yōu)樯舷挛膶?duì)象,并支持with語句。
from contextlib import closing
# Urllib3是一個(gè)功能強(qiáng)大,條理清晰,用于HTTP客戶端的Python庫
# urllib3.disable_warnings()禁用urllib3警告的方法
requests.packages.urllib3.disable_warnings()
# 創(chuàng)建類Sipder()
class Spider():
 def __init__(self):
  # UA對(duì)照表:https://blog.csdn.net/time888/article/details/72822729
  self.headers = {
      # 用戶代理:用于瀏覽器識(shí)別的,可以看出自己系統(tǒng)版本,瀏覽器,瀏覽器內(nèi)核等
      '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():外部調(diào)用運(yùn)行
 def run(self):
  # 輸入ID地址(爬去某人抖音視頻的抖音號(hào))
  user_id = input('Enter the ID:')
  try:
   # 因?yàn)槎兑籼?hào)是數(shù)字所以使用int()驗(yàn)證是否是數(shù)字
   int(user_id)
  # 輸入錯(cuò)誤時(shí)輸出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ù)字權(quán)限模式創(chuàng)建目錄
   os.mkdir(nickname)
  print('[INFO]:Number of Videos <%s>' % len(video_urls))
  for num in range(len(video_names)):
   # %d是一個(gè)占位符,標(biāo)識(shí)一個(gè)字符串型的數(shù)據(jù), %s也是一個(gè)占位符,標(biāo)識(shí)一個(gè)字符串型的數(shù)據(jù)
   print('[INFO]:Parsing <No.%d> <Url:%s>' % (num+1, video_urls[num]))
   temp = video_names[num].replace('\\', '')
   video_name = temp.replace('/', '')
   # 調(diào)用函數(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
  # 定義一個(gè)變量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)
      # 計(jì)算寫入字符串的長度
      size += len(data)
      # flush() 方法是用來刷新緩沖區(qū)的,即將緩沖區(qū)中的數(shù)據(jù)立刻寫入文件,同時(shí)清空緩沖區(qū),不需要是被動(dòng)的等待輸出緩沖區(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 請(qǐng)求驗(yàn)證 SSL 證書,就像 web 瀏覽器一樣。要想檢查某個(gè)主機(jī)的 SSL 證書,你可以使用 verify 參數(shù):
  # 定義變量res用來接收視頻地址,verify 僅應(yīng)用于主機(jī)證書
  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]去除最后一個(gè)字符
  script = soup.find_all('script')[-1]
  # 定義變量date=正則表達(dá)式\[(.+)]\,[0]可以使其返回一個(gè)字典
  video_url_js = re.findall('var data = \[(.+)\];', str(script))[0]
  # 使用loads()下載
  html = json.loads(video_url_js)
  # 返回,使用[0]是返回一個(gè)字典
  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 = ''
  # 當(dāng)獲取的id不是用戶的id時(shí):
  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)
  # 請(qǐng)求獲取用戶的url
  res = requests.get(url=user_url, verify=False)
  # 下載后去的url轉(zhuǎn)換的文本
  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)建對(duì)象
 sp = Spider()
 sp.run()
"""

溫馨提示: 有些庫是要自己去下載,一般使用命令在提示符下輸入:pip install 自己要下載的庫,如下圖是博主下載的。

2、在文件夾doy_ying下新建第二個(gè)文件:run.py

代碼:

# coding=utf-8
"""
@author: jiajiknag
程序功能: 測試抖音視頻的下載
"""
from dou_ying_video_download import Spider
if __name__ == '__main__':
 # 創(chuàng)建類Spider()對(duì)象
 sp = Spider()
 # 運(yùn)行開始下載
 sp.run()

3、結(jié)果

這是我在抖音中隨便找的一個(gè)發(fā)布抖音視頻比較少的來測試一下,以及我還下載了自己的抖音

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python OpenCV一個(gè)窗口中顯示多幅圖像

    Python OpenCV一個(gè)窗口中顯示多幅圖像

    大家好,本篇文章主要講的是Python OpenCV一個(gè)窗口中顯示多幅圖像,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2022-01-01
  • 解決python對(duì)齊錯(cuò)誤的方法

    解決python對(duì)齊錯(cuò)誤的方法

    在本篇文章里小編給大家整理的是關(guān)于python對(duì)齊錯(cuò)誤的解決方法,需要的朋友們可以參考學(xué)習(xí)下。
    2020-07-07
  • Python連接mysql方法及常用參數(shù)

    Python連接mysql方法及常用參數(shù)

    這篇文章主要介紹了Python連接mysql方法及常用參數(shù),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • Python異常處理try語句應(yīng)用技巧實(shí)例探究

    Python異常處理try語句應(yīng)用技巧實(shí)例探究

    異常處理在Python中是至關(guān)重要的,try-except是用于捕獲和處理異常的核心機(jī)制之一,本文就帶大家深入了解如何使用try-except,處理各種異常情況
    2024-01-01
  • 對(duì)python 數(shù)據(jù)處理中的LabelEncoder 和 OneHotEncoder詳解

    對(duì)python 數(shù)據(jù)處理中的LabelEncoder 和 OneHotEncoder詳解

    今天小編就為大家分享一篇對(duì)python 數(shù)據(jù)處理中的LabelEncoder 和 OneHotEncoder詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • 對(duì)python制作自己的數(shù)據(jù)集實(shí)例講解

    對(duì)python制作自己的數(shù)據(jù)集實(shí)例講解

    今天小編就為大家分享一篇對(duì)python制作自己的數(shù)據(jù)集實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • python基于tkinter圖形化編程實(shí)現(xiàn)簡易計(jì)算器功能

    python基于tkinter圖形化編程實(shí)現(xiàn)簡易計(jì)算器功能

    這篇文章主要為大家詳細(xì)介紹了python基于tkinter圖形化編程實(shí)現(xiàn)簡易計(jì)算器功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • python進(jìn)行圖像邊緣檢測的詳細(xì)教程

    python進(jìn)行圖像邊緣檢測的詳細(xì)教程

    相信大家對(duì)于邊緣檢測這幾個(gè)詞并不陌生,但是相對(duì)于如何處理,如何進(jìn)行圖像的邊緣檢測卻無能為力、束手無策了,下面這篇文章主要給大家介紹了關(guān)于python進(jìn)行圖像邊緣檢測的詳細(xì)教程,需要的朋友可以參考下
    2023-04-04
  • 使用Python繪制蛇年春節(jié)祝福藝術(shù)圖

    使用Python繪制蛇年春節(jié)祝福藝術(shù)圖

    這篇文章主要介紹了如何使用Python的Matplotlib庫繪制一幅富有創(chuàng)意的“蛇年有?!彼囆g(shù)圖,這幅圖結(jié)合了數(shù)字,蛇形,花朵等裝飾,需要的可以參考下
    2025-01-01
  • 帶你一文搞懂Python文件的讀寫操作

    帶你一文搞懂Python文件的讀寫操作

    讀寫文件是最常見的IO操作,Python內(nèi)置了讀寫文件的函數(shù),下面這篇文章主要給大家介紹了關(guān)于Python文件讀寫操作的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05

最新評(píng)論

高淳县| 县级市| 山东省| 漯河市| 康平县| 红安县| 施秉县| 澄城县| 仙居县| 万山特区| 扎赉特旗| 桃江县| 正宁县| 虹口区| 潢川县| 保亭| 灵丘县| 全南县| 晋宁县| 沾益县| 龙陵县| 龙川县| 电白县| 平乐县| 惠州市| 武宁县| 连平县| 铜山县| 保亭| 马山县| 江阴市| 麻阳| 潞西市| 平阴县| 高尔夫| 巴南区| 和顺县| 汶川县| 彭泽县| 英吉沙县| 安国市|