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下载懒人图库JavaScript特效
May 28 Python
利用Python批量生成任意尺寸的图片
Aug 29 Python
python实现将读入的多维list转为一维list的方法
Jun 28 Python
python 数字类型和字符串类型的相互转换实例
Jul 17 Python
python分数表示方式和写法
Jun 26 Python
python 自动轨迹绘制的实例代码
Jul 05 Python
python 的 scapy库,实现网卡收发包的例子
Jul 23 Python
Python Web程序搭建简单的Web服务器
Jul 31 Python
使用Matplotlib绘制不同颜色的带箭头的线实例
Apr 17 Python
keras训练浅层卷积网络并保存和加载模型实例
Jul 02 Python
python实现人工蜂群算法
Sep 18 Python
Python还能这么玩之只用30行代码从excel提取个人值班表
Jun 05 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
phpBB BBcode处理的漏洞
2006/10/09 PHP
php 各种应用乱码问题的解决方法
2010/05/09 PHP
php学习之简单计算器实现代码
2011/06/09 PHP
PHP生成自适应大小的缩略图类及使用方法分享
2014/05/06 PHP
支付宝服务窗API接口开发php版本
2016/07/20 PHP
PHP7创建销毁session的实例方法
2020/02/03 PHP
js压缩利器
2007/02/20 Javascript
PPK 谈 JavaScript 的 this 关键字 [翻译]
2009/09/29 Javascript
现如今最流行的JavaScript代码规范
2014/03/08 Javascript
js实现简单锁屏功能实例
2015/05/27 Javascript
从重置input file标签中看jQuery的 .val() 和 .attr(“value”) 区别
2016/06/12 Javascript
浅谈vue项目优化之页面的按需加载(vue+webpack)
2017/12/11 Javascript
解决Angular2 router.navigate刷新页面的问题
2018/08/31 Javascript
解决Vue2.0 watch对象属性变化监听不到的问题
2018/09/11 Javascript
layer.open弹层查看缩略图的原图,自适应大小的实例
2019/09/05 Javascript
解决layui数据表格排序图标被超出的表头挤出去的问题
2019/09/19 Javascript
python基础教程之Hello World!
2014/08/29 Python
Python 基于Twisted框架的文件夹网络传输源码
2016/08/28 Python
Python 详解基本语法_函数_返回值
2017/01/22 Python
关于Python形参打包与解包小技巧分享
2019/08/24 Python
python中matplotlib条件背景颜色的实现
2019/09/02 Python
解决pip install psycopg2出错问题
2020/07/09 Python
python爬虫线程池案例详解(梨视频短视频爬取)
2021/02/20 Python
pandas 按日期范围筛选数据的实现
2021/02/20 Python
物流创业计划书
2014/02/01 职场文书
创业大赛策划书
2014/03/01 职场文书
相亲大会策划方案
2014/06/05 职场文书
业绩倒数第一的检讨书
2014/09/24 职场文书
材料员岗位职责
2015/02/10 职场文书
简历自荐信范文
2015/03/09 职场文书
教师岗位职责范本
2015/04/02 职场文书
六一晚会主持词开场白
2015/05/28 职场文书
各类场合主持词开场白范文集锦
2019/08/16 职场文书
基于python的matplotlib制作双Y轴图
2021/04/20 Python
Java并发编程之原子性-Atomic的使用
2022/03/16 Java/Android
【DOTA2】总决赛血虐~ XTREME GAMING vs MAGMA - OGA DOTA PIT 2022 CN
2022/04/02 DOTA