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转换HTML到Text纯文本的方法
Jan 15 Python
Python面向对象编程基础解析(一)
Oct 26 Python
学习Python3 Dlib19.7进行人脸面部识别
Jan 24 Python
Python3多进程 multiprocessing 模块实例详解
Jun 11 Python
Python使用POP3和SMTP协议收发邮件的示例代码
Apr 16 Python
Django框架文件上传与自定义图片上传路径、上传文件名操作分析
May 10 Python
python下PyGame的下载与安装过程及遇到问题
Aug 04 Python
python实现UDP协议下的文件传输
Mar 20 Python
python传到前端的数据,双引号被转义的问题
Apr 03 Python
如何实现在jupyter notebook中播放视频(不停地展示图片)
Apr 23 Python
Python Tornado核心及相关原理详解
Jun 24 Python
七个Python必备的GUI库
Apr 27 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
《OVERLORD》第四季,终于等到你!
2020/03/02 日漫
php程序之die调试法 快速解决错误
2009/09/17 PHP
yii2使用ajax返回json的实现方法
2016/05/14 PHP
基于php判断客户端类型
2016/10/14 PHP
PHP新特性之字节码缓存和内置服务器
2017/08/11 PHP
[原创]PHP实现生成vcf vcard文件功能类定义与使用方法详解【附demo源码下载】
2017/09/02 PHP
xml分页+ajax请求数据源+dom取结果实例代码
2008/10/31 Javascript
Document对象内容集合(比较全)
2010/09/06 Javascript
js调用activeX获取u盘序列号的代码
2011/11/21 Javascript
javascript定时器完整实例
2015/02/10 Javascript
JavaScript按值删除数组元素的方法
2015/04/24 Javascript
js文本框输入内容智能提示效果
2015/12/02 Javascript
JS基于onclick事件实现单个按钮的编辑与保存功能示例
2017/02/13 Javascript
jquery对table做排序操作的实例演示
2017/08/10 jQuery
Node使用Sequlize连接Mysql报错:Access denied for user ‘xxx’@‘localhost’
2018/01/03 Javascript
微信小程序本地存储实现每日签到、连续签到功能
2019/10/09 Javascript
js实现购物车商品数量加减
2020/09/21 Javascript
Vue实现简单的留言板
2020/10/23 Javascript
js加减乘除精确运算方法实例代码
2021/01/17 Javascript
[02:19]2014DOTA2国际邀请赛 专访820少年们一起去追梦吧
2014/07/14 DOTA
[01:31:02]TNC vs VG 2019国际邀请赛淘汰赛 胜者组赛BO3 第一场
2019/08/22 DOTA
python使用正则表达式替换匹配成功的组
2017/11/17 Python
python+opencv+caffe+摄像头做目标检测的实例代码
2018/08/03 Python
selenium处理元素定位点击无效问题
2019/06/12 Python
对python while循环和双重循环的实例详解
2019/08/23 Python
Python+Selenium+phantomjs实现网页模拟登录和截图功能(windows环境)
2019/12/11 Python
Python编程快速上手——疯狂填词程序实现方法分析
2020/02/29 Python
关于tensorflow softmax函数用法解析
2020/06/30 Python
python爬取招聘要求等信息实例
2020/11/20 Python
工作自我评价分享
2013/12/01 职场文书
办公室文书岗位职责
2013/12/16 职场文书
调解协议书
2014/04/16 职场文书
《揠苗助长》教学反思
2016/02/20 职场文书
Go使用协程交替打印字符
2021/04/29 Golang
SQL实现LeetCode(175.联合两表)
2021/08/04 MySQL
vue项目支付功能代码详解
2022/02/18 Vue.js