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/ironpython:从入门到精通
Oct 02 Python
python实现域名系统(DNS)正向查询的方法
Apr 19 Python
Python基于scapy实现修改IP发送请求的方法示例
Jul 08 Python
Python解决走迷宫问题算法示例
Jul 27 Python
在python中利用最小二乘拟合二次抛物线函数的方法
Dec 29 Python
Python socket 套接字实现通信详解
Aug 27 Python
Python input函数使用实例解析
Nov 22 Python
利用python画出AUC曲线的实例
Feb 28 Python
基于Python爬取51cto博客页面信息过程解析
Aug 25 Python
Python3 pyecharts生成Html文件柱状图及折线图代码实例
Sep 29 Python
python Cartopy的基础使用详解
Nov 01 Python
python必学知识之文件操作(建议收藏)
May 30 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 接口类与抽象类的实际作用
2009/11/26 PHP
解析php中的escape函数
2013/06/29 PHP
php使用wordwrap格式化文本段落的方法
2015/03/17 PHP
php socket通信简单实现
2016/11/18 PHP
PHP使用openssl扩展实现加解密方法示例
2020/02/20 PHP
jQuery ctrl+Enter shift+Enter实现代码
2010/02/07 Javascript
javascript中window.event事件用法详解
2012/12/11 Javascript
jQuery实现别踩白块儿网页版小游戏
2017/01/18 Javascript
彻底学会Angular.js中的transclusion
2017/03/12 Javascript
Babel 入门教程学习笔记
2018/06/13 Javascript
react+ant design实现Table的增、删、改的示例代码
2018/12/27 Javascript
Layui之table中的radio在切换分页时无法记住选中状态的解决方法
2019/09/02 Javascript
layui表格内容溢出的解决方法
2019/09/06 Javascript
微信小程序点击列表跳转到对应详情页过程解析
2019/09/26 Javascript
python Django模板的使用方法
2016/01/14 Python
python初学之用户登录的实现过程(实例讲解)
2017/12/23 Python
python用户管理系统
2018/03/13 Python
浅谈python str.format与制表符\t关于中文对齐的细节问题
2019/01/14 Python
Python Numpy 实现交换两行和两列的方法
2019/06/26 Python
Python爬虫 scrapy框架爬取某招聘网存入mongodb解析
2019/07/31 Python
Python中的相关分析correlation analysis的实现
2019/08/29 Python
Python 类属性与实例属性,类对象与实例对象用法分析
2019/09/20 Python
Python生成词云的实现代码
2020/01/14 Python
python Matplotlib基础--如何添加文本和标注
2021/01/26 Python
css3强大的动画效果animate使用说明及浏览器兼容介绍
2013/01/09 HTML / CSS
华润集团网上药店:健一网
2016/09/19 全球购物
美国杰西潘尼官网:JCPenney
2019/06/12 全球购物
豪华复古化妆:Besame Cosmetics
2019/09/06 全球购物
村容村貌整治方案
2014/05/21 职场文书
创建文明城市标语
2014/06/16 职场文书
小学生校园广播稿
2014/09/28 职场文书
感谢信范文大全
2015/01/23 职场文书
2015年高一班主任工作总结
2015/05/13 职场文书
沂蒙六姐妹观后感
2015/06/08 职场文书
中学教代会开幕词
2016/03/04 职场文书
各类场合主持词开场白范文集锦
2019/08/16 职场文书