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中的闭包
Aug 11 Python
python使用opencv进行人脸识别
Apr 07 Python
python爬取哈尔滨天气信息
Jul 14 Python
Django组件content-type使用方法详解
Jul 19 Python
Django forms表单 select下拉框的传值实例
Jul 19 Python
详解使用django-mama-cas快速搭建CAS服务的实现
Oct 30 Python
调用其他python脚本文件里面的类和方法过程解析
Nov 15 Python
python re模块匹配贪婪和非贪婪模式详解
Feb 11 Python
在python里使用await关键字来等另外一个协程的实例
May 04 Python
python 获取谷歌浏览器保存的密码
Jan 06 Python
python保存大型 .mat 数据文件报错超出 IO 限制的操作
May 10 Python
Python写情书? 10行代码展示如何把情书写在她的照片里
Apr 21 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,ajax实现分页
2008/03/27 PHP
php zend解密软件绿色版测试可用
2008/04/14 PHP
php学习之数据类型之间的转换介绍
2011/06/09 PHP
PHP中使用数组实现堆栈数据结构的代码
2012/02/05 PHP
一些php项目中比较通用的php自建函数的详解
2013/06/06 PHP
ThinkPHP实现非标准名称数据表快速创建模型的方法
2014/11/29 PHP
php 修改上传文件大小限制实例详解
2016/10/23 PHP
Laravel Validator自定义错误返回提示消息并在前端展示
2019/05/09 PHP
php文件上传原理与实现方法详解
2019/12/20 PHP
JavaScript根据数据生成百分比图和柱状图的实例代码
2013/07/14 Javascript
javascript获取form里的表单元素的示例代码
2014/02/14 Javascript
js使用正则实现ReplaceAll全部替换的方法
2014/08/22 Javascript
快速学习jQuery插件 Form表单插件使用方法
2015/12/01 Javascript
关于axios不能使用Vue.use()浅析
2018/01/12 Javascript
vue-cli 目录结构详细讲解总结
2019/01/15 Javascript
生产制造追溯系统之在线打印功能
2019/06/03 Javascript
vue3.0 上手体验
2020/09/21 Javascript
nuxt 实现在其它js文件中使用store的方式
2020/11/05 Javascript
python异步任务队列示例
2014/04/01 Python
总结网络IO模型与select模型的Python实例讲解
2016/06/27 Python
使用requests库制作Python爬虫
2018/03/25 Python
关于python中密码加盐的学习体会小结
2019/07/15 Python
python中列表的切片与修改知识点总结
2019/07/23 Python
Django项目之Elasticsearch搜索引擎的实例
2019/08/21 Python
详解Django admin高级用法
2019/11/06 Python
使用pymysql查询数据库,把结果保存为列表并获取指定元素下标实例
2020/05/15 Python
Python Scrapy多页数据爬取实现过程解析
2020/06/12 Python
python爬虫---requests库的用法详解
2020/09/28 Python
加拿大城市本地限时优惠:Buytopia.ca
2018/09/19 全球购物
Bibloo荷兰:女士、男士和儿童的服装、鞋子和配饰
2019/02/25 全球购物
如何在存储过程中使用Loop
2016/01/05 面试题
服装设计专业自荐信
2014/06/17 职场文书
联谊活动总结
2014/08/28 职场文书
师德师风学习材料
2014/12/19 职场文书
教育教学读书笔记
2015/07/02 职场文书
《钓鱼的启示》教学反思
2016/02/18 职场文书