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 可爱的大小写
Sep 06 Python
python列表操作使用示例分享
Feb 21 Python
在Python中操作列表之List.append()方法的使用
May 20 Python
Python写入数据到MP3文件中的方法
Jul 10 Python
举例讲解Python中字典的合并值相加与异或对比
Jun 04 Python
python3 pillow生成简单验证码图片的示例
Sep 19 Python
Django密码系统实现过程详解
Jul 19 Python
python基于plotly实现画饼状图代码实例
Dec 16 Python
Python基础之函数原理与应用实例详解
Jan 03 Python
浅谈优化Django ORM中的性能问题
Jul 09 Python
Python 数据可视化神器Pyecharts绘制图像练习
Feb 28 Python
python套接字socket通信
Apr 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面向对象概念
2011/11/06 PHP
php使用CURL不依赖COOKIEJAR获取COOKIE的方法
2015/06/17 PHP
分享PHP计算两个日期相差天数的代码
2015/12/23 PHP
Jquery下attr和removeAttr的使用方法
2010/12/28 Javascript
javascript 获取图片尺寸及放大图片
2013/09/04 Javascript
对象题目的一个坑 理解Javascript对象
2015/12/22 Javascript
js与jQuery实现checkbox复选框全选/全不选的方法
2016/01/05 Javascript
全面解析Bootstrap中form、navbar的使用方法
2016/05/30 Javascript
javascript验证手机号和实现星号(*)代替实例
2016/08/16 Javascript
学习Angular中作用域需要注意的坑
2016/08/17 Javascript
jQuery Ajax全解析
2017/02/13 Javascript
jQuery实现的手风琴侧边菜单效果
2017/03/29 jQuery
extjs简介_动力节点Java学院整理
2017/07/17 Javascript
Vue.js组件间的循环引用方法示例
2017/12/27 Javascript
vue.js指令v-for使用以及下标索引的获取
2019/01/31 Javascript
vue-router 起步步骤详解
2019/03/26 Javascript
[49:56]VG vs Optic 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
深入理解python中的闭包和装饰器
2016/06/12 Python
python的scikit-learn将特征转成one-hot特征的方法
2018/07/10 Python
Python批处理更改文件名os.rename的方法
2018/10/26 Python
100行Python代码实现每天不同时间段定时给女友发消息
2019/09/27 Python
Python如何将将模块分割成多个文件
2020/08/04 Python
python 对象真假值的实例(哪些视为False)
2020/12/11 Python
英国图书音像网站:Hive.co.uk(图书、电子书、DVD、蓝光、音乐CD等)
2017/10/16 全球购物
法国低价在线宠物商店:bitiba.fr
2020/07/03 全球购物
中医专业应届生求职信
2013/11/17 职场文书
国旗下讲话演讲稿
2014/05/08 职场文书
新闻工作者先进事迹
2014/05/26 职场文书
计算机网络及管理学专业求职信
2014/06/05 职场文书
2014年办公室文员工作总结
2014/11/12 职场文书
2014年银行信贷员工作总结
2014/12/08 职场文书
2016年寒假学习心得体会
2015/10/09 职场文书
2021年pycharm的最新安装教程及基本使用图文详解
2021/04/03 Python
详解CSS玩转图片Base64编码
2021/05/25 HTML / CSS
Redis RDB技术底层原理详解
2021/09/04 Redis
Docker 镜像介绍以及commit相关操作
2022/04/13 Servers