python批量爬取下载抖音视频


Posted in Python onJune 17, 2019

本文实例为大家分享了python批量爬取下载抖音视频的具体代码,供大家参考,具体内容如下

import os
import requests
import re
import sys
import asyncio
import aiohttp

headers = {
  'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) '
         'Version/11.0 Mobile/15A372 Safari/604.1'
}

VIDEO_URLS, PAGE = [], 1


def get_info(url):
  """
  :param url: 用户的链接
  :return:返回name,dytk,user_id 参数
  """
  name = None
  dytk = None
  user_id = None
  try:
    response = requests.get(url, headers=headers)
    user_id = response.url.split('/')[5].split('?')[0]
    name = re.search(r'class="nickname">(.*?)<', response.text)[1]
    dytk = re.search(r"dytk: '(.*?)'", response.text)[1]
  except (TypeError, IndexError):
    sys.stdout.write('Waring:输入的链接错误')
  except requests.exceptions:
    sys.stdout.write('Waring:链接错误')
  finally:
    return name, user_id, dytk


def make_dir(name):
  """
  建立文件夹
  :param name: 用户名称
  :return:
  """
  if not os.path.isdir(name):
    os.mkdir(name)
  else:
    pass


def get_all_video(user_id, max_cursor, dytk):
  """
  获取视频的地址
  :param user_id:
  :param max_cursor:
  :param dytk:
  :return:
  """
  url = "https://www.amemv.com/aweme/v1/aweme/post/?"
  params = {'user_id': user_id,
       'count': 21,
       'max_cursor': max_cursor,
       'dytk': dytk}
  try:
    response = requests.get(url=url, params=params, headers=headers)
    if response.status_code == 200:
      datas = response.json()
      for data in datas['aweme_list']:
        name = data.get('share_info').get('share_desc')
        url = data.get('video').get('play_addr').get('url_list')[0].replace('playwm', 'play')
        VIDEO_URLS.append([name, url])
      if datas['has_more'] == 1 and datas.get('max_cursor') != 0:
        global PAGE
        print(f'收集第{PAGE}页视频')
        PAGE += 1
        return get_all_video(user_id, datas.get('max_cursor'), dytk)
      else:
        print('收集完成')
        return VIDEO_URLS
    else:
      print('状态码:', response.status_code)
      return None
  except Exception as e:
    print('Waring:', e)
    return


async def download_video(index, name, video_name, url):
  """
  下载视频
  :param index:  视频id
  :param name:  用户名称
  :param video_name: 视频名称
  :param url:   下载url
  :return:
  """
  print(f'正在下载第{index}个视频:{video_name}')
  video_path = '{}/{}.mp4'.format(name, video_name)
  if not os.path.isfile(video_path):
    try:
      async with aiohttp.ClientSession() as session:
        async with session.get(url=url, headers=headers, ssl=False) as response:
          with open(video_path, 'wb') as f:
            while True:
              chunk = await response.content.read(1024)
              f.write(chunk)
              if not chunk:
                break
            print(f'下载完成第{index}个视频:{video_name}')
    except Exception as e:
      print('waring:download faild', video_name, e)
      return
  else:
    print('文件已存在')


def main():
  url = 'http://v.douyin.com/dEorkn/'
  name, user_id, dytk = get_info(url)
  if not (name, user_id, dytk):
    return
  make_dir(name)
  get_all_video(user_id, 0, dytk)
  print(f'{name}:总共有{len(VIDEO_URLS)}个视频')
  tasks = []
  for index, item in enumerate(VIDEO_URLS, 1):
    video_name = item[0]
    url = item[1]
    tasks.append(asyncio.ensure_future(download_video(index, name, video_name, url)))
  loop = asyncio.get_event_loop()
  loop.run_until_complete(asyncio.wait(tasks))
  loop.run_until_complete(asyncio.sleep(0))
  loop.close()
  print(f'{name}视频下载完成!')


if __name__ == '__main__':
  main()

python批量爬取下载抖音视频

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python解析json文件相关知识学习
Mar 01 Python
Python批量更改文件名的实现方法
Oct 29 Python
Python操作MongoDB数据库的方法示例
Jan 04 Python
Sanic框架基于类的视图用法示例
Jul 18 Python
python中的常量和变量代码详解
Jul 25 Python
Python字符串对象实现原理详解
Jul 01 Python
Python Django Vue 项目创建过程详解
Jul 29 Python
pandas-resample按时间聚合实例
Dec 27 Python
Python tkinter实现简单加法计算器代码实例
May 13 Python
Python使用pyexecjs代码案例解析
Jul 13 Python
python xlwt模块的使用解析
Apr 13 Python
浅谈怎么给Python添加类型标注
Jun 08 Python
python批量下载抖音视频
Jun 17 #Python
Python基础学习之类与实例基本用法与注意事项详解
Jun 17 #Python
python文本数据处理学习笔记详解
Jun 17 #Python
python3+PyQt5 实现Rich文本的行编辑方法
Jun 17 #Python
Appium+python自动化之连接模拟器并启动淘宝APP(超详解)
Jun 17 #Python
python3+PyQt5 数据库编程--增删改实例
Jun 17 #Python
python3+PyQt5 创建多线程网络应用-TCP客户端和TCP服务器实例
Jun 17 #Python
You might like
PHP 可阅读随机字符串代码
2010/05/26 PHP
php入门学习知识点八 PHP中for循环基本应用之九九乘法口绝表
2011/07/14 PHP
PHP中SSO Cookie登录分析和实现
2015/11/06 PHP
php实现常见图片格式的水印和缩略图制作(面向对象)
2016/06/15 PHP
php解析非标准json、非规范json的方式实例
2020/12/10 PHP
如何在标题栏显示框架内页面的标题
2007/02/03 Javascript
jQuery实现的图片轮播效果完整示例
2016/09/12 Javascript
微信小程序开发实战教程之手势解锁
2016/11/18 Javascript
纯JS单页面赛车游戏制作代码分享
2017/03/03 Javascript
在Debian(Raspberry Pi)树莓派上安装NodeJS的教程详解
2017/09/19 NodeJs
浅谈JavaScript_DOM学习篇_图片切换小案例
2019/03/19 Javascript
vue和better-scroll实现列表左右联动效果详解
2019/04/29 Javascript
jQuery实现的点击显示隐藏下拉菜单功能完整示例
2019/05/17 jQuery
layui prompt 设置允许空白提交的方法
2019/09/24 Javascript
vue单应用在ios系统中实现微信分享功能操作
2020/09/07 Javascript
[41:41]TFT vs Secret Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
Python 字符串定义
2009/09/25 Python
Python中使用PyHook监听鼠标和键盘事件实例
2014/07/18 Python
解决Pycharm运行时找不到文件的问题
2018/10/29 Python
python远程调用rpc模块xmlrpclib的方法
2019/01/11 Python
处理Selenium3+python3定位鼠标悬停才显示的元素
2019/07/31 Python
pandas中遍历dataframe的每一个元素的实现
2019/10/23 Python
python实现的读取网页并分词功能示例
2019/10/29 Python
Python实现分数序列求和
2020/02/25 Python
浅谈Python中的生成器和迭代器
2020/06/19 Python
HTML5表格_动力节点Java学院整理
2017/07/11 HTML / CSS
HTML5学习心得总结(推荐)
2016/07/08 HTML / CSS
阿里巴巴的Oracle DBA笔试题答案-SQL tuning类
2016/04/03 面试题
结构工程个人自荐信范文
2013/11/30 职场文书
浙大毕业生自荐信
2014/01/26 职场文书
建国大业观后感
2015/06/01 职场文书
热爱劳动主题班会
2015/08/14 职场文书
HR在给员工开具离职证明时,需要注意哪些问题?
2019/07/03 职场文书
大学生饮品店创业计划书范文
2019/07/10 职场文书
spring cloud 配置中心客户端启动遇到的问题
2021/09/25 Java/Android
CSS的calc函数用法小结
2022/06/25 HTML / CSS