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 相关文章推荐
利用numpy实现一、二维数组的拼接简单代码示例
Dec 15 Python
python远程连接服务器MySQL数据库
Jul 02 Python
Windows系统下PhantomJS的安装和基本用法
Oct 21 Python
Win10下Python3.7.3安装教程图解
Jul 08 Python
python应用文件读取与登录注册功能
Sep 23 Python
python 实现兔子生兔子示例
Nov 21 Python
python如何实现不用装饰器实现登陆器小程序
Dec 14 Python
Python Scrapy框架第一个入门程序示例
Feb 05 Python
Python IDLE或shell中切换路径的操作
Mar 09 Python
学习python需要有编程基础吗
Jun 02 Python
python爬虫---requests库的用法详解
Sep 28 Python
详解python定时简单爬取网页新闻存入数据库并发送邮件
Nov 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
日本因肺炎疫情影响,这几部动漫推延播放!
2020/03/03 日漫
PHP数组的交集array_intersect(),array_intersect_assoc(),array_inter_key()函数的小问题
2011/05/29 PHP
php中获取主机名、协议及IP地址的方法
2014/11/18 PHP
自己的js工具 Cookie 封装
2009/08/21 Javascript
javascript面向对象编程代码
2011/12/19 Javascript
jQuery编辑器KindEditor4.1.4代码高亮显示设置教程
2013/03/01 Javascript
jQuery中on()方法用法实例详解
2015/02/06 Javascript
switch语句的妙用(必看篇)
2016/10/03 Javascript
js 获取json数组里面数组的长度实例
2017/10/31 Javascript
Vue验证码60秒倒计时功能简单实例代码
2018/06/22 Javascript
JavaScript实现获取两个排序数组的中位数算法示例
2019/02/26 Javascript
微信小程序实现日期格式化和倒计时
2020/11/01 Javascript
Vue实现导航栏的显示开关控制
2019/11/01 Javascript
JavaScript实现简单的计算器
2020/01/16 Javascript
vue 使用插槽分发内容操作示例【单个插槽、具名插槽、作用域插槽】
2020/03/06 Javascript
Vue触发input选取文件点击事件操作
2020/08/07 Javascript
IDEA配置jQuery, $符号不再显示黄色波浪线的问题
2020/10/09 jQuery
python 装饰器功能以及函数参数使用介绍
2012/01/27 Python
python中ConfigParse模块的用法
2014/09/29 Python
Python压缩解压缩zip文件及破解zip文件密码的方法
2015/11/04 Python
Python实现TCP协议下的端口映射功能的脚本程序示例
2016/06/14 Python
pygame游戏之旅 添加icon和bgm音效的方法
2018/11/21 Python
Python爬虫实现模拟点击动态页面
2020/03/05 Python
python操作微信自动发消息的实现(微信聊天机器人)
2020/07/14 Python
css3绘制百度的小度熊
2018/10/29 HTML / CSS
环境工程毕业生自荐信
2013/11/17 职场文书
社区工作者思想汇报
2014/01/13 职场文书
优良学风班总结材料
2014/02/08 职场文书
生产厂长岗位职责
2014/02/21 职场文书
护士个人自我鉴定
2014/03/24 职场文书
竞选学生会演讲稿
2014/04/25 职场文书
校园文化标语
2014/06/18 职场文书
模范教师材料大全
2014/12/16 职场文书
刮痧观后感
2015/06/05 职场文书
农村婚礼司仪主持词
2015/06/29 职场文书
python 实现mysql自动增删分区的方法
2021/04/01 Python