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 client使用http post 到server端的代码
Feb 10 Python
Python中还原JavaScript的escape函数编码后字符串的方法
Aug 22 Python
python比较2个xml内容的方法
May 11 Python
Python简单实现TCP包发送十六进制数据的方法
Apr 16 Python
Python栈算法的实现与简单应用示例
Nov 01 Python
python中lambda()的用法
Nov 16 Python
100行python代码实现跳一跳辅助程序
Jan 15 Python
Django 使用Ajax进行前后台交互的示例讲解
May 28 Python
对Python的多进程锁的使用方法详解
Feb 18 Python
Python中的异常处理try/except/finally/raise用法分析
Feb 28 Python
Django choices下拉列表绑定实例
Mar 13 Python
Django REST framwork的权限验证实例
Apr 02 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
destoon二次开发常用数据库操作
2014/06/21 PHP
php使用PDO获取结果集的方法
2017/02/16 PHP
ThinkPHP框架实现导出excel数据的方法示例【基于PHPExcel】
2018/05/12 PHP
PHP输出Excel PHPExcel的方法
2018/07/26 PHP
PHP PDOStatement::bindParam讲解
2019/01/30 PHP
Laravel模糊查询区分大小写的实例
2019/09/29 PHP
【消息提示组件】,兼容IE6/7&amp;&amp;FF2
2007/09/04 Javascript
JavaScript函数、方法、对象代码
2008/10/29 Javascript
火狐浏览器(firefox)下获得Event对象以及keyCode
2008/11/13 Javascript
js 对联广告、漂浮广告封装类(IE,FF,Opera,Safari,Chrome
2009/11/26 Javascript
JavaScript之appendChild、insertBefore和insertAfter使用说明
2010/12/30 Javascript
禁用键盘上的(全局)指定键兼容iE、Chrome、火狐
2013/05/14 Javascript
javascript完美拖拽的实现方法
2013/09/29 Javascript
JavaScript仿网易选项卡制作代码
2016/10/06 Javascript
Javascript生成带参数的二维码示例
2016/10/10 Javascript
javascript self对象使用详解
2016/10/18 Javascript
vue实现通讯录功能
2018/07/14 Javascript
python检测lvs real server状态
2014/01/22 Python
下载python中Crypto库报错:ModuleNotFoundError: No module named ‘Crypto’的解决
2018/04/23 Python
python语音识别实践之百度语音API
2018/08/30 Python
Python ORM编程基础示例
2020/02/02 Python
TensorFlow基本的常量、变量和运算操作详解
2020/02/03 Python
查看已安装tensorflow版本的方法示例
2020/04/19 Python
Python接口测试文件上传实例解析
2020/05/22 Python
Python通过kerberos安全认证操作kafka方式
2020/06/06 Python
HTML5 新旧语法标记对我们有什么好处
2012/12/13 HTML / CSS
HTML5本地存储之Database Storage应用介绍
2013/01/06 HTML / CSS
Html5之webcoekt播放JPEG图片流
2020/09/22 HTML / CSS
BIFFI美国站:意大利BIFFI BOUTIQUES豪华多品牌时装零售公司
2020/02/11 全球购物
优秀经理获奖感言
2014/03/04 职场文书
2014年学生会工作总结
2014/11/07 职场文书
员工离职通知函
2015/04/25 职场文书
团结友爱主题班会
2015/08/13 职场文书
python numpy中setdiff1d的用法说明
2021/04/22 Python
Nginx源码编译安装过程记录
2021/11/17 Servers
Python selenium绕过webdriver监测执行javascript
2022/04/12 Python