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抓取最新博客内容并生成Rss
May 17 Python
Python装饰器实现几类验证功能做法实例
May 18 Python
python爬虫入门教程--优雅的HTTP库requests(二)
May 25 Python
python实现给微信公众号发送消息的方法
Jun 30 Python
100行Python代码实现自动抢火车票(附源码)
Jan 11 Python
Python为何不能用可变对象作为默认参数的值
Jul 01 Python
对Django项目中的ORM映射与模糊查询的使用详解
Jul 18 Python
Python 异步协程函数原理及实例详解
Nov 13 Python
python文件编写好后如何实践
Jul 07 Python
Python定义一个Actor任务
Jul 29 Python
基于python爬取梨视频实现过程解析
Nov 09 Python
python常量折叠基础知识点讲解
Feb 28 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计算整个目录大小的方法
2015/06/19 PHP
php+redis在实际项目中HTTP 500: Internal Server Error故障排除
2017/02/05 PHP
用JavaScript脚本实现Web页面信息交互
2006/12/21 Javascript
js获取和设置属性的方法
2014/02/20 Javascript
jQuery绑定事件不执行但alert后可以正常执行
2014/06/03 Javascript
判断浏览器的内核及版本号方法汇总
2015/01/05 Javascript
JavaScript中 ES6 generator数据类型详解
2016/08/11 Javascript
JS获取checkbox的个数简单实例
2016/08/19 Javascript
概述jQuery的元素筛选
2016/11/23 Javascript
使用Xcache缓存器加速PHP网站的配置方法
2017/04/22 Javascript
Vue学习之路之登录注册实例代码
2017/07/06 Javascript
vue子父组件通信的实现代码
2017/07/09 Javascript
什么是Vue.js框架 为什么选择它?
2017/10/17 Javascript
JS实现利用两个队列表示一个栈的方法
2017/12/13 Javascript
vue2.0实现移动端的输入框实时检索更新列表功能
2018/05/08 Javascript
vue项目中使用Hbuilder打包app 设置沉浸式状态栏的方法
2018/10/22 Javascript
Node.js Buffer模块功能及常用方法实例分析
2019/01/05 Javascript
如何解决js函数防抖、节流出现的问题
2019/06/17 Javascript
VUE组件中的 Drawer 抽屉实现代码
2019/08/06 Javascript
纯js+css实现仿移动端淘宝网站的弹出详情框功能
2019/12/29 Javascript
序列化模块json代码实例详解
2020/03/03 Javascript
vue点击Dashboard不同内容 跳转到同一表格的实例
2020/11/13 Javascript
[44:50]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 TNC vs VG
2018/04/02 DOTA
python笔记(1) 关于我们应不应该继续学习python
2012/10/24 Python
Python采用socket模拟TCP通讯的实现方法
2014/11/19 Python
Python遍历文件夹和读写文件的实现代码
2016/08/28 Python
git使用.gitignore设置不生效或不起作用问题的解决方法
2017/06/01 Python
Python处理mysql特殊字符的问题
2020/03/02 Python
通俗讲解python 装饰器
2020/09/07 Python
Python collections.deque双边队列原理详解
2020/10/05 Python
python 基于pygame实现俄罗斯方块
2021/03/02 Python
乐高西班牙官方商店:LEGO Shop ES
2019/12/01 全球购物
酒店中秋节促销方案
2014/01/30 职场文书
党的群众路线教育实践活动对照检查剖析材料
2014/10/09 职场文书
2015年园林绿化工作总结
2015/05/23 职场文书
车间安全生产管理制度
2015/08/06 职场文书