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下的多进程编程
Apr 28 Python
在Python中操作字典之clear()方法的使用
May 21 Python
浅谈python中截取字符函数strip,lstrip,rstrip
Jul 17 Python
使用python将时间转换为指定的格式方法
Nov 12 Python
Python爬虫实现获取动态gif格式搞笑图片的方法示例
Dec 24 Python
Python File(文件) 方法整理
Feb 18 Python
python爬虫基础教程:requests库(二)代码实例
Apr 09 Python
python使用requests.session模拟登录
Aug 09 Python
python网络爬虫 Scrapy中selenium用法详解
Sep 28 Python
tensorflow实现在函数中用tf.Print输出中间值
Jan 21 Python
python和php哪个更适合写爬虫
Jun 22 Python
浅析Python 序列化与反序列化
Aug 05 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边学边教》(02.Apache+PHP环境配置――上篇)
2006/12/13 PHP
php中通过数组进行高效随机抽取指定条记录的算法
2013/09/09 PHP
PHP列出MySQL中所有数据库的方法
2015/03/12 PHP
js技巧--转义符&quot;\&quot;的妙用
2007/01/09 Javascript
javascript 限制输入和粘贴(IE,firefox测试通过)
2008/11/14 Javascript
JS 非图片动态loading效果实现代码
2010/04/09 Javascript
node.js 一个简单的页面输出实现代码
2012/03/07 Javascript
node.js中使用node-schedule实现定时任务实例
2014/06/03 Javascript
Javascript代码实现仿实例化类
2015/04/03 Javascript
JavaScript简单遍历DOM对象所有属性的实现方法
2015/10/21 Javascript
angular基于路由控制ui-router实现系统权限控制
2016/09/27 Javascript
BootStrap中关于Select下拉框选择触发事件及扩展
2016/11/22 Javascript
JavaScript自定义函数实现查找两个字符串最长公共子串的方法
2016/11/24 Javascript
JS得到当前时间的方法示例
2017/03/24 Javascript
JavaScript数据结构之二叉树的查找算法示例
2017/04/13 Javascript
Vuex利用state保存新闻数据实例
2017/06/28 Javascript
Node.js 回调函数实例详解
2017/07/06 Javascript
浅谈vuex之mutation和action的基本使用
2017/08/29 Javascript
原生JS实现获取及修改CSS样式的方法
2018/09/04 Javascript
在js代码拼接dom对象到页面上的模板总结
2018/10/21 Javascript
vue的注意规范之v-if 与 v-for 一起使用教程
2019/08/04 Javascript
推荐11个实用Python库
2015/01/23 Python
python编程实现归并排序
2017/04/14 Python
对pandas中时间窗函数rolling的使用详解
2018/11/28 Python
PyQt5 窗口切换与自定义对话框的实例
2019/06/20 Python
wxpython实现按钮切换界面的方法
2019/11/19 Python
python实现人机五子棋
2020/03/25 Python
用sleep间隔进行python反爬虫的实例讲解
2020/11/30 Python
用CSS3将你的设计带入下个高度
2009/08/08 HTML / CSS
使用phonegap检测网络状态的方法
2017/03/30 HTML / CSS
HTML5 CSS3实现一个精美VCD包装盒个性幻灯片案例
2014/06/16 HTML / CSS
工程力学专业毕业生求职信
2013/10/06 职场文书
旅游管理专业大学生职业规划书
2014/02/27 职场文书
知识竞赛主持词
2014/03/26 职场文书
财务负责人岗位职责
2015/02/03 职场文书
Java集成swagger文档组件
2021/06/28 Java/Android