python实现抖音视频批量下载


Posted in Python onJune 20, 2018

本文实例为大家分享了python实现抖音视频批量下载的具体代码,供大家参考,具体内容如下

这里就拿最近很火的抖音视频为例,利用API来实现用户抖音视频的批量下载

主要用到的模块有

1、requests模块;

2、bs4模块;

import requests
import bs4
import os
import json
import re
import sys
import time
from contextlib import closing
requests.packages.urllib3.disable_warnings()
class Spider():
  def __init__(self):
    self.headers = {
            '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]: Charles')
  # 外部调用运行
  def run(self):
    user_id = input('Enter the ID:')
    try:
      int(user_id)
    except:
      print('[Error]:ID error...')
      return
    video_names, video_urls, nickname = self._parse_userID(user_id)
    if nickname not in os.listdir():
      os.mkdir(nickname)
    print('[INFO]:Number of Videos <%s>' % len(video_urls))
    for num in range(len(video_names)):
      print('[INFO]:Parsing <No.%d> <Url:%s>' % (num+1, video_urls[num]))
      temp = video_names[num].replace('\\', '')
      video_name = temp.replace('/', '')
      self._downloader(video_urls[num], os.path.join(nickname, video_name))
      print('\n')
    print('[INFO]:All Done...')
  # 视频下载
  def _downloader(self, video_url, path):
    size = 0
    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))
        with open(path, 'wb') as f:
          for data in response.iter_content(chunk_size=chunk_size):
            f.write(data)
            size += len(data)
            f.flush()
            sys.stdout.write('[Progress]: %0.2f%%' % float(size/content_size*100) + '\r')
            sys.stdout.flush()
  # 获得视频下载地址
  def _get_download_url(self, video_url):
    res = requests.get(url=video_url, verify=False)
    soup = bs4.BeautifulSoup(res.text, 'lxml')
    script = soup.find_all('script')[-1]
    video_url_js = re.findall('var data = \[(.+)\];', str(script))[0]
    html = json.loads(video_url_js)
    return html['video']['play_addr']['url_list'][0]
  # 通过user_id获取该用户发布的所有视频
  def _parse_userID(self, user_id):
    video_names = []
    video_urls = []
    unique_id = ''
    while unique_id != user_id:
      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']
    user_url = 'https://www.douyin.com/aweme/v1/aweme/post/?user_id={}&max_cursor=0&count={}'.format(uid, aweme_count)
    res = requests.get(url=user_url, verify=False)
    res_dic = json.loads(res.text)
    i = 1
    for each in res_dic['aweme_list']:
      share_desc = each['share_info']['share_desc']
      if '抖音-原创音乐短视频社区' == 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__':
  sp = Spider()
  sp.run()

python实现抖音视频批量下载

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python标准库与第三方库详解
Jul 22 Python
深入理解Django的自定义过滤器
Oct 17 Python
Python多线程编程之多线程加锁操作示例
Sep 06 Python
Python设计模式之组合模式原理与用法实例分析
Jan 11 Python
python安装pil库方法及代码
Jun 25 Python
Python类中方法getitem和getattr详解
Aug 30 Python
python global关键字的用法详解
Sep 05 Python
python装饰器原理与用法深入详解
Dec 19 Python
python 命名规范知识点汇总
Feb 14 Python
Python pyautogui模块实现鼠标键盘自动化方法详解
Feb 17 Python
Tensorflow之MNIST CNN实现并保存、加载模型
Jun 17 Python
忆童年!用Python实现愤怒的小鸟游戏
Jun 07 Python
Python 类的特殊成员解析
Jun 20 #Python
python实现音乐下载的统计
Jun 20 #Python
django2用iframe标签完成网页内嵌播放b站视频功能
Jun 20 #Python
python基于http下载视频或音频
Jun 20 #Python
python实现下载pop3邮件保存到本地
Jun 19 #Python
python+POP3实现批量下载邮件附件
Jun 19 #Python
python实现批量解析邮件并下载附件
Jun 19 #Python
You might like
php 分页类 扩展代码
2009/06/11 PHP
php ob_flush,flush在ie中缓冲无效的解决方法
2010/05/09 PHP
PHP的Laravel框架中使用消息队列queue及异步队列的方法
2016/03/21 PHP
PHP 文件上传后端处理实用技巧方法
2017/01/06 PHP
Javascript document.referrer判断访客来源网址
2020/05/15 Javascript
jQuery实现固定在网页顶部的菜单效果代码
2015/09/02 Javascript
jQuery实现滑动页面固定顶部显示(可根据显示位置消失与替换)
2015/10/28 Javascript
举例讲解如何判断JavaScript中对象的类型
2016/04/22 Javascript
AngularJS  $modal弹出框实例代码
2016/08/24 Javascript
jquery实现手机端单店铺购物车结算删除功能
2017/02/22 Javascript
vue-cli+webpack记事本项目创建
2017/04/01 Javascript
JavaScript实现滑动导航栏效果
2017/08/30 Javascript
原生JS上传大文件显示进度条 php上传文件代码
2020/03/27 Javascript
vue实现前进刷新后退不刷新效果
2018/01/26 Javascript
layui数据表格实现重载数据表格功能(搜索功能)
2019/07/27 Javascript
Vue使用Clipboard.JS在h5页面中复制内容实例详解
2019/09/03 Javascript
从零开始在vue-cli4配置自适应vw布局的实现
2020/06/08 Javascript
[01:24]2014DOTA2 TI第二日 YYF表示这届谁赢都有可能
2014/07/11 DOTA
测试、预发布后用python检测网页是否有日常链接
2014/06/03 Python
教大家使用Python SqlAlchemy
2016/02/12 Python
Python使用QRCode模块生成二维码实例详解
2017/06/14 Python
Python机器学习之决策树算法实例详解
2017/12/06 Python
Python IDLE入门简介
2017/12/08 Python
对Python 多线程统计所有csv文件的行数方法详解
2019/02/12 Python
Python叠加两幅栅格图像的实现方法
2019/07/05 Python
python tkinter组件使用详解
2019/09/16 Python
Python破解BiliBili滑块验证码的思路详解(完美避开人机识别)
2020/02/17 Python
Python中使用Selenium环境安装的方法步骤
2021/02/22 Python
美国最大的珠宝商之一:Littman Jewelers
2016/11/13 全球购物
您的健身减肥和健康饮食专家:vitafy
2017/06/06 全球购物
什么情况下你必须要把一个类定义为abstract的
2013/01/06 面试题
恶意软件的定义
2014/11/12 面试题
思想政治教育专业个人求职信范文
2013/12/20 职场文书
《美丽的彩虹》教学反思
2014/02/25 职场文书
党员反对四风思想汇报范文
2014/10/25 职场文书
党员廉政准则心得体会
2016/01/20 职场文书