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将MongoDB里的ObjectId转换为时间戳的方法
Mar 13 Python
Python中super的用法实例
May 28 Python
用tensorflow搭建CNN的方法
Mar 05 Python
六行python代码的爱心曲线详解
May 17 Python
Python使用线程来接收串口数据的示例
Jul 02 Python
基于python的Paxos算法实现
Jul 03 Python
Keras在训练期间可视化训练误差和测试误差实例
Jun 16 Python
python如何实现读取并显示图片(不需要图形界面)
Jul 08 Python
解决pyinstaller 打包exe文件太大,用pipenv 缩小exe的问题
Jul 13 Python
python中子类与父类的关系基础知识点
Feb 02 Python
python爬取豆瓣电影TOP250数据
May 23 Python
Python中使用Opencv开发停车位计数器功能
Apr 04 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
简单了解将WordPress中的工具栏移到底部的小技巧
2015/12/31 PHP
Ruffy javascript 学习笔记
2009/11/30 Javascript
jquery.validate的使用说明介绍
2013/11/12 Javascript
jquery实现弹出层完美居中效果
2014/03/03 Javascript
探寻Javascript执行效率问题
2014/11/12 Javascript
webapp框架AngularUI的demo改造之路
2014/12/21 Javascript
2014 年最热门的21款JavaScript框架推荐
2014/12/25 Javascript
SWFObject基本用法实例分析
2015/07/20 Javascript
超实用的JavaScript表单代码段
2016/02/26 Javascript
Highcharts入门之基本属性
2016/08/02 Javascript
BackBone及其实例探究_动力节点Java学院整理
2017/07/14 Javascript
微信小程序开发之好友列表字母列表跳转对应位置
2017/09/26 Javascript
浅谈Vue.js中ref ($refs)用法举例总结
2017/12/19 Javascript
vue 动态修改a标签的样式的方法
2018/01/18 Javascript
JavaScript使用闭包模仿块级作用域操作示例
2019/01/21 Javascript
vue组件中iview的modal组件爬坑问题之modal的显示与否应该是使用v-show
2019/04/12 Javascript
ant design实现圈选功能
2019/12/17 Javascript
[01:04:31]DOTA2-DPC中国联赛定级赛 iG vs Magma BO3第二场 1月8日
2021/03/11 DOTA
python转换字符串为摩尔斯电码的方法
2015/07/06 Python
PyCharm使用教程之搭建Python开发环境
2016/06/07 Python
python基于itchat实现微信群消息同步机器人
2017/02/27 Python
python urllib urlopen()对象方法/代理的补充说明
2017/06/29 Python
机器学习10大经典算法详解
2017/12/07 Python
pycharm 配置远程解释器的方法
2018/10/28 Python
python自动发微信监控报警
2019/09/06 Python
Python Scrapy框架:通用爬虫之CrawlSpider用法简单示例
2020/04/11 Python
CSS3+js实现简单的时钟特效
2015/03/18 HTML / CSS
施华洛世奇加拿大官网:SWAROVSKI加拿大
2018/06/03 全球购物
毕业自我鉴定范文
2013/11/06 职场文书
2014年办公室文员工作总结
2014/11/12 职场文书
2014年前台个人工作总结
2014/11/14 职场文书
幼儿园六一儿童节活动总结
2015/02/10 职场文书
先进工作者个人总结
2015/02/15 职场文书
2016年社区植树节活动总结
2016/03/16 职场文书
mysql备份策略的实现(全量备份+增量备份)
2021/07/07 MySQL
Win11 Build 22000.51版本文件资源管理器“命令栏”和上下文菜单有什么新变化?
2021/11/21 数码科技