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之import机制详解
Jul 03 Python
python中requests模块的使用方法
Apr 08 Python
Python编程之Re模块下的函数介绍
Oct 28 Python
Python设计模式之迭代器模式原理与用法实例分析
Jan 10 Python
Python 合并多个TXT文件并统计词频的实现
Aug 23 Python
Python 3.8正式发布,来尝鲜这些新特性吧
Oct 15 Python
基于Python解密仿射密码
Oct 21 Python
Win下PyInstaller 安装和使用教程
Dec 25 Python
python 爬虫 实现增量去重和定时爬取实例
Feb 28 Python
python 通过邮件控制实现远程控制电脑操作
Mar 16 Python
基于django micro搭建网站实现加水印功能
May 22 Python
python 将列表里的字典元素合并为一个字典实例
Sep 01 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函数utf8转gb2312编码
2006/12/21 PHP
PHP 修复未正常关闭的HTML标签实现代码(支持嵌套和就近闭合)
2012/06/07 PHP
nginx+thinkphp下解决不支持pathinfo模式
2015/07/01 PHP
Laravel 5.1 on SAE环境开发教程【附项目demo源码】
2016/10/09 PHP
PHP手机号中间四位用星号*代替显示的实例
2017/06/02 PHP
Extjs实现进度条的两种便捷方式
2013/09/26 Javascript
nodejs的10个性能优化技巧
2014/07/15 NodeJs
node.js中的buffer.fill方法使用说明
2014/12/14 Javascript
DOM基础教程之使用DOM控制表单
2015/01/20 Javascript
jquery右下角自动弹出可关闭的广告层
2015/05/08 Javascript
JavaScript必知必会(二) null 和undefined
2016/06/08 Javascript
使用jQuery给input标签设置默认值
2016/06/20 Javascript
AngularJS删除路由中的#符号的方法
2016/09/20 Javascript
Vue.js教程之计算属性
2016/11/11 Javascript
jQuery 如何实现一个滑动按钮开关
2016/12/01 Javascript
ionic2打包android时gradle无法下载的解决方法
2017/04/05 Javascript
ReactNative短信验证码倒计时控件的实现代码
2017/07/20 Javascript
微信小程序实现的动态设置导航栏标题功能示例
2019/01/31 Javascript
详解jquery和vue对比
2019/04/16 jQuery
Node.js 的 GC 机制详解
2019/06/03 Javascript
vue3.0中使用postcss-pxtorem的具体方法
2019/11/20 Javascript
Python使用arrow库优雅地处理时间数据详解
2017/10/10 Python
Python cookbook(数据结构与算法)将名称映射到序列元素中的方法
2018/03/22 Python
Python提取特定时间段内数据的方法实例
2019/04/01 Python
Python中psutil的介绍与用法
2019/05/02 Python
python语言time库和datetime库基本使用详解
2020/12/25 Python
Python之Sklearn使用入门教程
2021/02/19 Python
美国领先的家居装饰和礼品商店:Kirkland’s
2017/01/30 全球购物
华纳兄弟工作室的官方授权商店:WB Shop
2018/11/30 全球购物
继承时候类的执行顺序问题,一般都是选择题,问你将会打印出什么?
2015/11/18 面试题
保安队长职务说明书
2014/02/23 职场文书
学校安全管理责任书
2014/07/23 职场文书
区域经理岗位职责
2015/02/02 职场文书
2016春季幼儿园开学寄语
2015/12/03 职场文书
Apache Pulsar集群搭建部署详细过程
2022/02/12 Servers
零基础学java之带参数以及返回值的方法
2022/04/10 Java/Android