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的ORM框架SQLObject入门实例
Apr 28 Python
Python3读取UTF-8文件及统计文件行数的方法
May 22 Python
利用Python查看目录中的文件示例详解
Aug 28 Python
python2.7实现爬虫网页数据
May 25 Python
Python 根据数据模板创建shapefile的实现
Nov 26 Python
Pytorch实现LSTM和GRU示例
Jan 14 Python
python使用ctypes调用扩展模块的实例方法
Jan 28 Python
Python图像处理库PIL的ImageEnhance模块使用介绍
Feb 26 Python
如何在Python 游戏中模拟引力
Mar 27 Python
python 在sql语句中使用%s,%d,%f说明
Jun 06 Python
Django restful framework生成API文档过程详解
Nov 12 Python
Python中pass的作用与使用教程
Nov 13 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中执行cmd命令的方法
2014/10/11 PHP
php中ftp_chdir与ftp_cdup函数用法
2014/11/18 PHP
thinkPHP订单数字提醒功能的实现方法
2016/12/01 PHP
纯js网页画板(Graphics)类简介及实现代码
2012/12/24 Javascript
模拟多级复选框效果的jquery代码
2013/08/13 Javascript
jqplot通过ajax动态画折线图的方法及思路
2013/12/08 Javascript
jquery简单倒计时实现方法
2015/12/18 Javascript
JQuery解析XML的方法小结
2016/04/02 Javascript
前端设计师们最常用的JS代码汇总
2016/09/25 Javascript
过期软件破解办法实例详解
2017/01/04 Javascript
js实现用户输入的小写字母自动转大写字母的方法
2017/01/21 Javascript
详解基于webpack搭建react运行环境
2017/06/01 Javascript
vue-cli3.0 特性解读
2018/04/22 Javascript
再谈Angular4 脏值检测(性能优化)
2018/04/23 Javascript
vue项目中使用百度地图的方法
2018/06/08 Javascript
JS封装的模仿qq右下角消息弹窗功能示例
2018/08/22 Javascript
Vue父子组件之间的通信实例详解
2018/09/28 Javascript
vue项目每30秒刷新1次接口的实现方法
2018/12/04 Javascript
ES6如何用一句代码实现函数的柯里化
2020/01/18 Javascript
Python创建日历实例
2014/08/21 Python
Python中的exec、eval使用实例
2014/09/23 Python
Python实现把xml或xsl转换为html格式
2015/04/08 Python
Python实现简单的文件传输与MySQL备份的脚本分享
2016/01/03 Python
python编程通过蒙特卡洛法计算定积分详解
2017/12/13 Python
对Python中列表和数组的赋值,浅拷贝和深拷贝的实例讲解
2018/06/28 Python
python3结合openpyxl库实现excel操作的实例代码
2018/09/11 Python
python tools实现视频的每一帧提取并保存
2020/03/20 Python
python爬虫 模拟登录人人网过程解析
2019/07/31 Python
Python获取浏览器窗口句柄过程解析
2020/07/25 Python
python基于selenium爬取斗鱼弹幕
2021/02/20 Python
路由表示做什么用的?在linux环境中怎么来配置一条默认路由?
2013/06/07 面试题
Hibernate持久层技术
2013/12/16 面试题
亮剑观后感500字
2015/06/05 职场文书
退休职工欢送会致辞
2015/08/01 职场文书
Nginx使用X-Accel-Redirect实现静态文件下载的统计、鉴权、防盗链、限速等
2021/04/04 Servers
利用Java设置Word文本框中的文字旋转方向的实现方法
2021/06/28 Java/Android