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 相关文章推荐
win与linux系统中python requests 安装
Dec 04 Python
python+opencv实现动态物体识别
Jan 09 Python
Python实现基于TCP UDP协议的IPv4 IPv6模式客户端和服务端功能示例
Mar 22 Python
基于windows下pip安装python模块时报错总结
Jun 12 Python
python多行字符串拼接使用小括号的方法
Mar 19 Python
Python爬虫常用小技巧之设置代理IP
Sep 13 Python
pycharm 在windows上编辑代码用linux执行配置的方法
Oct 27 Python
Python爬虫实战之12306抢票开源
Jan 24 Python
使用python写一个自动浏览文章的脚本实例
Dec 05 Python
Python读取JSON数据操作实例解析
May 18 Python
Python正则表达式如何匹配中文
May 27 Python
聊聊python中的异常嵌套
Sep 01 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中Y2K38的漏洞解决方法实例分析
2014/09/22 PHP
php实现屏蔽掉黑帽SEO的搜索关键字
2015/04/15 PHP
php邮件发送的两种方式
2020/04/28 PHP
编写PHP脚本清除WordPress头部冗余代码的方法讲解
2016/03/01 PHP
php日期操作技巧小结
2016/06/25 PHP
php字符集转换
2017/01/23 PHP
网络之美 JavaScript中Get和Set访问器的实现代码
2010/09/19 Javascript
JavaScript使用cookie实现记住账号密码功能
2015/04/27 Javascript
JavaScript程序中的流程控制语句用法总结
2016/05/23 Javascript
基于AngularJS前端云组件最佳实践
2016/10/20 Javascript
浅谈Vue.js
2017/03/02 Javascript
javascript实现滑动解锁功能
2017/03/22 Javascript
VUE利用vuex模拟实现新闻点赞功能实例
2017/06/28 Javascript
vue实现word,pdf文件的导出功能
2018/07/31 Javascript
微信内置浏览器图片查看器的代码实例
2019/10/08 Javascript
[02:14]2016国际邀请赛中国区预选赛Ehome晋级之路
2016/07/01 DOTA
[36:45]TNC vs VGJ.S 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python入门篇之编程习惯与特点
2014/10/17 Python
Python基于多线程实现抓取数据存入数据库的方法
2018/06/22 Python
django DRF图片路径问题的解决方法
2018/09/10 Python
python将一个英文语句以单词为单位逆序排放的方法
2018/12/20 Python
python生成带有表格的图片实例
2019/02/03 Python
用openCV和Python 实现图片对比,并标识出不同点的方式
2019/12/19 Python
Tensorflow实现在训练好的模型上进行测试
2020/01/20 Python
基于python3实现倒叙字符串
2020/02/18 Python
Python 字符串池化的前提
2020/07/03 Python
Pytorch之Tensor和Numpy之间的转换的实现方法
2020/09/03 Python
HTML4和HTML5之间除了相似以外的10个主要不同
2012/12/13 HTML / CSS
简单介绍HTML5中audio标签的使用
2015/09/24 HTML / CSS
加拿大城市本地限时优惠:Buytopia.ca
2018/09/19 全球购物
桥梁与隧道工程专业本科生求职信
2013/10/08 职场文书
班组安全员工作职责
2014/02/01 职场文书
社会公德演讲稿
2014/05/20 职场文书
整顿机关作风心得体会
2014/09/10 职场文书
2016先进工作者事迹材料
2016/02/25 职场文书
redis protocol通信协议及使用详解
2022/07/15 Redis