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实现将目录中TXT合并成一个大TXT文件的方法
Jul 15 Python
python去除字符串中的换行符
Oct 11 Python
Python中使用支持向量机SVM实践
Dec 27 Python
python3.6使用pickle序列化class的方法
Oct 22 Python
Python和Go语言的区别总结
Feb 20 Python
python批量爬取下载抖音视频
Jun 17 Python
华为校园招聘上机笔试题 扑克牌大小(python)
Apr 22 Python
Python实现简单的列表冒泡排序和反转列表操作示例
Jul 10 Python
3种适用于Python的疯狂秘密武器及原因解析
Apr 29 Python
python打开音乐文件的实例方法
Jul 21 Python
python 动态渲染 mysql 配置文件的示例
Nov 20 Python
完美处理python与anaconda环境变量的冲突问题
Apr 07 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
数据库的日期格式转换
2006/10/09 PHP
在PWS上安装PHP4.0正式版
2006/10/09 PHP
PHP JS Ip地址及域名格式检测代码
2013/09/27 PHP
php调用c接口无错版介绍
2014/03/11 PHP
利用PHP绘图函数实现简单验证码功能的方法
2016/10/18 PHP
在Laravel5.6中使用Swoole的协程数据库查询
2018/06/15 PHP
精通JavaScript 纠正 cleanWhitespace函数
2010/03/11 Javascript
jQuery的$.proxy()应用示例介绍
2014/04/03 Javascript
Jquery效果大全之制作电脑健康体检得分特效附源码下载
2015/11/02 Javascript
Google 地图API资料整理及详细介绍
2016/08/06 Javascript
使用ajax的post同步执行(实现方法)
2017/12/21 Javascript
Node.js的Koa实现JWT用户认证方法
2018/05/05 Javascript
JavaScript数组特性与实践应用深入详解
2018/12/30 Javascript
vue接入腾讯防水墙代码
2019/05/07 Javascript
Vue.js@2.6.10更新内置错误处机制Fundebug同步支持相应错误监控
2019/05/13 Javascript
使用Vue开发自己的Chrome扩展程序过程详解
2019/06/21 Javascript
在vue-cli中引入lodash.js并使用详解
2019/11/13 Javascript
[57:16]2014 DOTA2华西杯精英邀请赛 5 25 LGD VS VG第二场
2014/05/26 DOTA
Python中的文件和目录操作实现代码
2011/03/13 Python
对python中return和print的一些理解
2017/08/18 Python
使用Python监控文件内容变化代码实例
2018/06/04 Python
python使用PIL模块获取图片像素点的方法
2019/01/08 Python
python实现飞机大战游戏
2020/10/26 Python
python如何通过pyqt5实现进度条
2020/01/20 Python
Python Socket TCP双端聊天功能实现过程详解
2020/06/15 Python
移动端HTML5实现文件上传功能【附代码】
2016/03/25 HTML / CSS
语文教学随笔感言
2014/02/18 职场文书
农村优秀教师事迹材料
2014/08/27 职场文书
重阳节标语大全
2014/10/07 职场文书
单位员工收入证明样本
2014/10/09 职场文书
高中同学会致辞
2015/08/01 职场文书
2016天猫双十一广告语
2016/01/28 职场文书
婚前协议书怎么写,才具有法律效力呢 ?
2019/06/28 职场文书
vue-element-admin项目导入和导出的实现
2021/05/21 Vue.js
HTML基础详解(上)
2021/10/16 HTML / CSS
游戏《铁拳》动画化!2022年年内播出
2022/03/21 日漫