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检测远程服务器tcp端口的方法
Mar 14 Python
pandas string转dataframe的方法
Apr 11 Python
详解TensorFlow查看ckpt中变量的几种方法
Jun 19 Python
python使用tornado实现简单爬虫
Jul 28 Python
python TKinter获取文本框内容的方法
Oct 11 Python
Python字符串匹配之6种方法的使用详解
Apr 08 Python
Python全栈之列表数据类型详解
Oct 01 Python
python基于socket实现的UDP及TCP通讯功能示例
Nov 01 Python
Python编程快速上手——强口令检测算法案例分析
Feb 29 Python
Python定义函数实现累计求和操作
May 03 Python
python中time.ctime()实例用法
Feb 03 Python
python 爬取吉首大学网站成绩单
Jun 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
PHP弹出提示框并跳转到新页面即重定向到新页面
2014/01/24 PHP
又一个PHP实现的冒泡排序算法分享
2014/08/21 PHP
ThinkPHP调用common/common.php函数提示错误function undefined的解决方法
2014/08/25 PHP
php while循环控制的简单实例
2016/05/30 PHP
浅谈Laravel队列实现原理解决问题记录
2017/08/19 PHP
PHP文件管理之实现网盘及压缩包的功能操作
2017/09/20 PHP
laravel-admin自动生成模块,及相关基础配置方法
2019/10/08 PHP
基于jquery的分页控件(C#)
2011/01/06 Javascript
javascript 事件处理程序介绍
2012/06/27 Javascript
NodeJS学习笔记之Connect中间件应用实例
2015/01/27 NodeJs
深入理解JavaScript中的箭头函数
2015/07/28 Javascript
js中 javascript:void(0) 用法详解
2015/08/11 Javascript
详解React Native网络请求fetch简单封装
2017/08/10 Javascript
微信小程序利用canvas 绘制幸运大转盘功能
2018/07/06 Javascript
使用svg实现动态时钟效果
2018/07/17 Javascript
Vue起步(无cli)的啊教程详解
2019/04/11 Javascript
详解vue3.0 diff算法的使用(超详细)
2020/07/01 Javascript
带你使用webpack快速构建web项目的方法
2020/11/12 Javascript
[01:29:31]VP VS VG Supermajor小组赛胜者组第二轮 BO3第一场 6.2
2018/06/03 DOTA
用Python实现QQ游戏大家来找茬辅助工具
2014/09/14 Python
python实现根据ip地址反向查找主机名称的方法
2015/04/29 Python
Python设计模式编程中解释器模式的简单程序示例分享
2016/03/02 Python
Python中工作日类库Busines Holiday的介绍与使用
2017/07/06 Python
Tensorflow中的placeholder和feed_dict的使用
2018/07/09 Python
django的csrf实现过程详解
2019/07/26 Python
在Python3 numpy中mean和average的区别详解
2019/08/24 Python
Python进阶之使用selenium爬取淘宝商品信息功能示例
2019/09/16 Python
Python try except异常捕获机制原理解析
2020/04/18 Python
css3实现顶部社会化分享按钮示例
2014/05/06 HTML / CSS
英国著名的茶叶品牌:Whittard of Chelsea
2016/09/22 全球购物
中秋节礼品促销方案
2014/02/02 职场文书
敬老模范事迹
2014/05/21 职场文书
乡镇平安建设汇报材料
2014/08/25 职场文书
敲诈同学钱财检讨书范文
2014/11/18 职场文书
2014年语文教研组工作总结
2014/12/06 职场文书
个人委托书范文
2015/01/28 职场文书