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中使用scapy模拟数据包实现arp攻击、dns放大攻击例子
Oct 23 Python
给Python IDLE加上自动补全和历史功能
Nov 30 Python
浅析Python中将单词首字母大写的capitalize()方法
May 18 Python
python socket多线程通讯实例分析(聊天室)
Apr 06 Python
Python机器学习logistic回归代码解析
Jan 17 Python
python中的数组赋值与拷贝的区别详解
Nov 26 Python
Pytest mark使用实例及原理解析
Feb 22 Python
PySide2出现“ImportError: DLL load failed: 找不到指定的模块”的问题及解决方法
Jun 10 Python
解决运行django程序出错问题 'str'object has no attribute'_meta'
Jul 15 Python
python的flask框架难学吗
Jul 31 Python
Python使用paramiko连接远程服务器执行Shell命令的实现
Mar 04 Python
Elasticsearch 索引操作和增删改查
Apr 19 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常用的三种设计模式汇总
2016/08/28 PHP
PHP实现mysqli批量执行多条语句的方法示例
2017/07/22 PHP
PHP whois查询类定义与用法示例
2019/04/03 PHP
TopList标签和JavaScript结合两例
2007/08/12 Javascript
javascript 从if else 到 switch case 再到抽象
2010/07/17 Javascript
ASP.NET jQuery 实例10 动态修改hyperlink的URL值
2012/02/03 Javascript
JavaScript获取按钮所在form表单id的方法
2015/04/02 Javascript
javascript实现动态改变层大小的方法
2015/05/14 Javascript
jQuery实现购物车表单自动结算效果实例
2015/08/10 Javascript
node.js实现端口转发
2016/04/14 Javascript
JSONP和批量操作功能的实现方法
2016/08/21 Javascript
js简单获取表单中单选按钮值的方法
2016/08/23 Javascript
cocos creator Touch事件应用(触控选择多个子节点的实例)
2017/09/10 Javascript
angularJs-$http实现百度搜索时的动态下拉框示例
2018/02/27 Javascript
关于echarts在节点显示动态数据及添加提示文本所遇到的问题
2018/04/20 Javascript
Vue高版本中一些新特性的使用详解
2018/09/25 Javascript
Vue基本使用之对象提供的属性功能
2019/04/30 Javascript
在vue-cli中引入lodash.js并使用详解
2019/11/13 Javascript
文章或博客自动生成章节目录索引(支持三级)的实现代码
2020/05/10 Javascript
python检测文件夹变化,并拷贝有更新的文件到对应目录的方法
2018/10/17 Python
python模拟登陆,用session维持回话的实例
2018/12/27 Python
ECCO爱步加拿大官网:北欧丹麦鞋履及皮具品牌
2017/07/08 全球购物
全球500多个机场的接送服务:Suntransfers
2019/06/03 全球购物
存储过程和sql语句的优缺点
2014/07/02 面试题
车间班长岗位职责
2013/11/30 职场文书
校园创业策划书
2014/01/14 职场文书
中专毕业生自我鉴定
2014/02/02 职场文书
《明天,我们毕业》教学反思
2014/04/24 职场文书
庆祝教师节演讲稿
2014/09/03 职场文书
2014年乡镇工会工作总结
2014/12/02 职场文书
大学生毕业评语
2014/12/31 职场文书
篮球赛新闻稿
2015/07/17 职场文书
文案策划岗位个人自我评价(范文)
2019/08/08 职场文书
Windows11性能真的上涨35%? 桌面酷睿i9实测结果公开
2021/11/21 数码科技
Vue2.0搭建脚手架
2022/03/13 Vue.js
windows server 2016 域环境搭建的方法步骤(图文)
2022/06/25 Servers