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中的jquery PyQuery库使用小结
May 13 Python
Python实现的多线程http压力测试代码
Feb 08 Python
Python探索之pLSA实现代码
Oct 25 Python
Python简单读取json文件功能示例
Nov 30 Python
对TensorFlow中的variables_to_restore函数详解
Jul 30 Python
python3.6 如何将list存入txt后再读出list的方法
Jul 02 Python
python数据类型之间怎么转换技巧分享
Aug 20 Python
基于Python3.7.1无法导入Numpy的解决方式
Mar 09 Python
python实现交并比IOU教程
Apr 16 Python
python 如何上传包到pypi
Dec 24 Python
pytorch 中nn.Dropout的使用说明
May 20 Python
深入理解python协程
Jun 15 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 输出缓存详解
2009/06/20 PHP
laravel 5异常错误:FatalErrorException in Handler.php line 38的解决
2017/10/12 PHP
一些常用且实用的原生JavaScript函数
2010/09/08 Javascript
基于jquery实现图片广告轮换效果代码
2011/07/07 Javascript
Javascript 颜色渐变效果的实现代码
2013/10/01 Javascript
浅谈Jquery为元素绑定事件
2015/04/27 Javascript
jQuery无刷新上传之uploadify3.1简单使用
2016/06/18 Javascript
bootstrap侧边栏圆点导航
2017/01/11 Javascript
微信小程序动态的加载数据实例代码
2017/04/14 Javascript
vue.js实例todoList项目
2017/07/07 Javascript
使用jquery的jsonp如何发起跨域请求及其原理详解
2017/08/17 jQuery
Vue页面跳转传递参数及接收方式
2020/09/09 Javascript
[01:01]青春无憾,一战成名——DOTA2全国高校联赛开启
2018/02/25 DOTA
在Python中使用Neo4j数据库的教程
2015/04/16 Python
Python记录详细调用堆栈日志的方法
2015/05/05 Python
fastcgi文件读取漏洞之python扫描脚本
2017/04/23 Python
Python实现简单文本字符串处理的方法
2018/01/22 Python
Python实现替换文件中指定内容的方法
2018/03/19 Python
python中virtualenvwrapper安装与使用
2018/05/20 Python
python使用MQTT给硬件传输图片的实现方法
2019/05/05 Python
关于keras.layers.Conv1D的kernel_size参数使用介绍
2020/05/22 Python
python读取图片颜色值并生成excel像素画的方法实例
2021/02/19 Python
canvas裁剪clip()函数的具体使用
2018/03/01 HTML / CSS
名人珠宝设计师:Melinda Maria Jewelry
2019/03/06 全球购物
IGK Hair官网:喷雾、洗发水、护发素等
2020/11/03 全球购物
施惠特软件测试面试题以及笔试题
2015/05/13 面试题
大型演出策划方案
2014/05/28 职场文书
小学运动会口号
2014/06/07 职场文书
云南省召开党的群众路线教育实践活动总结会议新闻稿
2014/10/21 职场文书
践行党的群众路线心得体会
2014/11/05 职场文书
请病假条范文
2015/08/17 职场文书
纪检干部学习心得体会
2016/01/23 职场文书
九年级语文教学反思
2016/03/03 职场文书
nginx请求限制配置方法
2021/07/09 Servers
高性能跳频抗干扰宽带自组网电台
2022/02/18 无线电
MySQL中rank() over、dense_rank() over、row_number() over用法介绍
2022/03/23 MySQL