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中的greenlet包实现并发编程的入门教程
Apr 16 Python
横向对比分析Python解析XML的四种方式
Mar 30 Python
Python实现Linux中的du命令
Jun 12 Python
python文件特定行插入和替换实例详解
Jul 12 Python
Python使用win32com实现的模拟浏览器功能示例
Jul 13 Python
python监控键盘输入实例代码
Feb 09 Python
python实现手机销售管理系统
Mar 19 Python
python将数组n等分的实例
Dec 02 Python
学习Python需要哪些工具
Sep 04 Python
基于Python制作一副扑克牌过程详解
Oct 19 Python
pytest fixtures装饰器的使用和如何控制用例的执行顺序
Jan 28 Python
python实现股票历史数据可视化分析案例
Jun 10 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后退一页表单内容保存实现方法
2012/06/17 PHP
PHP实现的比较完善的购物车类
2014/12/02 PHP
PHP针对字符串开头和结尾的判断方法
2016/07/11 PHP
PHP 计算两个特别大的整数实例代码
2018/05/07 PHP
农历与西历对照
2006/09/06 Javascript
JavaScript中的Math 使用介绍
2014/04/21 Javascript
Javascript 5种方法实现过滤删除前后所有空格
2016/06/22 Javascript
JS简单测试循环运行时间的方法
2016/09/04 Javascript
javascript对浅拷贝和深拷贝的详解
2016/10/14 Javascript
jQuery实现对网页节点的增删改查功能示例
2017/09/18 jQuery
node.js中http模块和url模块的简单介绍
2017/10/06 Javascript
zTree节点文字过多的处理方法
2017/11/24 Javascript
web前端vue实现插值文本和输出原始html
2018/01/19 Javascript
VUE2.0中Jsonp的使用方法
2018/05/22 Javascript
使用jQuery如何写一个含验证码的登录界面
2019/05/13 jQuery
对Layer弹窗使用及返回数据接收的实例详解
2019/09/26 Javascript
[00:57]深扒TI7聊天轮盘语音出处5
2017/05/11 DOTA
python常见排序算法基础教程
2017/04/13 Python
Django用户认证系统 组与权限解析
2019/08/02 Python
使用coverage统计python web项目代码覆盖率的方法详解
2019/08/05 Python
HTML+CSS3+JS 实现的下拉菜单
2020/11/25 HTML / CSS
Canvas与图片压缩的示例代码
2017/11/28 HTML / CSS
HTML5超炫酷粒子效果的进度条的实现示例
2019/08/23 HTML / CSS
AmazeUI 模态窗口的实现代码
2020/08/18 HTML / CSS
美国最灵活的移动提供商:Tello
2017/07/18 全球购物
美国半成品食材配送服务商:Home Chef
2018/01/25 全球购物
德国运动营养和健身网上商店:Myprotein.de
2018/07/18 全球购物
巴西Bo.Bô官方在线商店:经营奢侈品时尚业务
2020/03/16 全球购物
自考毕业生自我鉴定
2013/11/04 职场文书
汽车销售顾问求职自荐信
2014/01/01 职场文书
舞蹈教师自荐信
2014/01/27 职场文书
自我检讨书范文
2015/01/28 职场文书
酒桌上的祝酒词
2015/08/12 职场文书
Nginx+SpringBoot实现负载均衡的示例
2021/03/31 Servers
background-position百分比原理详解
2021/05/08 HTML / CSS
详解overflow:hidden的作用(溢出隐藏、清除浮动、解决外边距塌陷)
2021/07/01 HTML / CSS