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轻松实现代码编码格式转换
Mar 26 Python
Python实现简单多线程任务队列
Feb 27 Python
python+pyqt实现右下角弹出框
Oct 26 Python
tensorflow TFRecords文件的生成和读取的方法
Feb 06 Python
使用Python实现微信提醒备忘录功能
Dec 04 Python
Python实现从SQL型数据库读写dataframe型数据的方法【基于pandas】
Mar 18 Python
Django项目中实现使用qq第三方登录功能
Aug 13 Python
python默认参数调用方法解析
Feb 09 Python
python实现简单的tcp 文件下载
Sep 16 Python
python爬虫 requests-html的使用
Nov 30 Python
python中 .npy文件的读写操作实例
Apr 14 Python
Python 使用 Frame tkraise() 方法在 Tkinter 应用程序中的Frame之间切换
Apr 24 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生成唯一的促销/优惠/折扣码(附源码)
2012/12/28 PHP
php使用post数组的键值创建同名变量并赋值的方法
2015/04/03 PHP
Zend Framework基本页面布局分析
2016/03/19 PHP
CodeIgniter常用知识点小结
2016/05/26 PHP
PHP根据key删除数组中指定的元素
2019/02/28 PHP
如何在Web页面上直接打开、编辑、创建Office文档
2007/03/12 Javascript
jquery text,radio,checkbox,select操作实现代码
2009/07/09 Javascript
jquery下checked取值问题的解决方法
2012/08/09 Javascript
js用Date对象处理时间实现思路及代码
2013/01/31 Javascript
js取值中form.all和不加all的区别介绍
2014/01/20 Javascript
Js控制滑轮左右滑动实例
2015/02/13 Javascript
纯javascript实现四方向文本无缝滚动效果
2015/06/16 Javascript
浅谈jQuery中setInterval()方法
2015/07/07 Javascript
JavaScript继承学习笔记【新手必看】
2016/05/10 Javascript
js获取页面引用的css样式表中的属性值方法(推荐)
2016/08/19 Javascript
BootStrap glyphicon图标无法显示的解决方法
2016/09/06 Javascript
JS简单实现移动端日历功能示例
2016/12/28 Javascript
微信小程序 页面传值详解
2017/03/10 Javascript
jQuery获取table下某一行某一列的值实现代码
2017/04/07 jQuery
修改UA在PC中访问只能在微信中打开的链接方法
2017/11/27 Javascript
vue-router 手势滑动触发返回功能
2018/09/30 Javascript
js控制随机数生成概率代码实例
2019/03/21 Javascript
js实现窗口全屏示例详解
2019/09/17 Javascript
详谈在flask中使用jsonify和json.dumps的区别
2018/03/26 Python
利用python将pdf输出为txt的实例讲解
2018/04/23 Python
Python3 assert断言实现原理解析
2020/03/02 Python
Django ORM 查询表中某列字段值的方法
2020/04/30 Python
django中related_name的用法说明
2020/05/20 Python
html5视频媒体标签video的使用方法及完整参数说明详解
2019/09/27 HTML / CSS
信息专业本科生个人的自我评价
2013/10/28 职场文书
自我介绍演讲稿
2014/01/15 职场文书
家长对老师的评语
2014/04/18 职场文书
银行求职信怎么写
2014/05/26 职场文书
学习雷锋标语
2014/06/25 职场文书
2014年教研员工作总结
2014/12/23 职场文书
golang特有程序结构入门教程
2021/06/02 Python