python批量下载抖音视频

本文实例为大家分享了python批量下载抖音视频的具体代码,供大家参考,具体内容如下

知识储备:博主是在Pycharm下进行的
文件夹:dou_ying

1:在文件夹doy_ying下新建第一个文件:dou_ying_video_download.py
代码:

# coding=utf-8
"""
@author: jiajiknag
程序功能:批量下载抖音视频
"""
import requests
import bs4
import os
import json
import re
import sys
import time
# 如果一个对象没有实现上下文,我们就不能把它用于with语句。这个时候,可以用closing()来把该对象变为上下文对象。
# closing-将任意对象变为上下文对象,并支持with语句。
from contextlib import closing
# Urllib3是一个功能强大,条理清晰,用于HTTP客户端的Python库
# urllib3.disable_warnings()禁用urllib3警告的方法
requests.packages.urllib3.disable_warnings()
# 创建类Sipder()
class Spider():
    def __init__(self):
        # UA对照表:https://blog.csdn.net/time888/article/details/72822729
        self.headers = {
                        # 用户代理:用于浏览器识别的,可以看出自己系统版本,浏览器,浏览器内核等
                        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36'
                        }
        # 输出信息-视频信息
        print('[INFO]:Douyin(抖音) App Video downloader...')
        print('[Version]: V1.0')
        print('[Author]: Jiajikang')

# 创建函数run():外部调用运行
    def run(self):
        # 输入ID地址(爬去某人抖音视频的抖音号)
        user_id = input('Enter the ID:')
        try:
            # 因为抖音号是数字所以使用int()验证是否是数字
            int(user_id)
        # 输入错误时输出except下的语句
        except:
            print('[Error]:ID error...')
            return
        video_names, video_urls, nickname = self._parse_userID(user_id)
        #  os.listdir()方法用于返回指定的文件夹包含的文件或文件夹的名字的列表
        if nickname not in os.listdir():
            # os.mkdir() 方法用于以数字权限模式创建目录
            os.mkdir(nickname)
        print('[INFO]:Number of Videos <%s>' % len(video_urls))
        for num in range(len(video_names)):
            # %d是一个占位符,标识一个字符串型的数据, %s也是一个占位符,标识一个字符串型的数据
            print('[INFO]:Parsing <No.%d> <Url:%s>' % (num+1, video_urls[num]))
            temp = video_names[num].replace('\\', '')
            video_name = temp.replace('/', '')
            # 调用函数_downloader()
            self._downloader(video_urls[num], os.path.join(nickname, video_name))
            print('\n')
        print('[INFO]:All Done...')

# 创建函数_downloader()并含有参数:路径和视频的url-视频下载
    def _downloader(self, video_url, path):
        # 定义size并初始化为0
        size = 0
        # 定义一个变量download_url:利用函数_get_download_url()来获取视频url
        download_url = self._get_download_url(video_url)
        with closing(requests.get(download_url, headers=self.headers, stream=True, verify=False)) as response:
            chunk_size = 1024
            content_size = int(response.headers['content-length'])
            if response.status_code == 200:
                sys.stdout.write('[File Size]: %0.2f MB\n' % (content_size/chunk_size/1024))
                # 使用写入的方式打开,如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
                with open(path, 'wb') as f:
                    # 遍历获取数据
                    for data in response.iter_content(chunk_size=chunk_size):
                        # 向文件中写入指定的字符串data
                        f.write(data)
                        # 计算写入字符串的长度
                        size += len(data)
                        # flush() 方法是用来刷新缓冲区的,即将缓冲区中的数据立刻写入文件,同时清空缓冲区,不需要是被动的等待输出缓冲区写入。
                        f.flush()
                        sys.stdout.write('[Progress]: %0.2f%%' % float(size/content_size*100) + '\r')
                        sys.stdout.flush()

# 创建函数_get_download_url()并含有形参video_url:获得视频下载地址
    def _get_download_url(self, video_url):
        # 获取视频的下载地址
        # Requests 可以为 HTTPS 请求验证 SSL 证书,就像 web 浏览器一样。要想检查某个主机的 SSL 证书,你可以使用 verify 参数:
        # 定义变量res用来接收视频地址,verify 仅应用于主机证书
        res = requests.get(url=video_url, verify=False)
        # 将res.text 文件利用'lxml'解析成xml文件,了解lxml--https://blog.csdn.net/tanzuozhev/article/details/50442243
        soup = bs4.BeautifulSoup(res.text, 'lxml')
        # 使用find_all来获取网页中JavaScript中的script的变量;[-1]去除最后一个字符
        script = soup.find_all('script')[-1]
        # 定义变量date=正则表达式\[(.+)]\,[0]可以使其返回一个字典
        video_url_js = re.findall('var data = \[(.+)\];', str(script))[0]
        # 使用loads()下载
        html = json.loads(video_url_js)
        # 返回,使用[0]是返回一个字典
        return html['video']['play_addr']['url_list'][0]

# 定义函数_parse_userID()且形参user_id;通过user_id获取该用户发布的所有视频
    def _parse_userID(self, user_id):
        # 获取所有视频
        video_names = []
        video_urls = []
        unique_id = ''
        # 当获取的id不是用户的id时:
        while unique_id != user_id:
            # 获取url-下载
            search_url = 'https://api.amemv.com/aweme/v1/discover/search/?keyword={}&count=10&type=1&aid=1128'.format(user_id)
            res = requests.get(url=search_url, verify=False)
            res_dic = json.loads(res.text)
            uid = res_dic['user_list'][0]['user_info']['uid']
            aweme_count = res_dic['user_list'][0]['user_info']['aweme_count']
            nickname = res_dic['user_list'][0]['user_info']['nickname']
            unique_id = res_dic['user_list'][0]['user_info']['unique_id']
        # 用户的url
        user_url = 'https://www.douyin.com/aweme/v1/aweme/post/?user_id={}&max_cursor=0&count={}'.format(uid, aweme_count)
        # 请求获取用户的url
        res = requests.get(url=user_url, verify=False)
        # 下载后去的url转换的文本
        res_dic = json.loads(res.text)
        i = 1
        # 遍历下载的文本
        for each in res_dic['aweme_list']:
            share_desc = each['share_info']['share_desc']
            if '抖音-原创音乐短视频社区' == share_desc:
                video_names.append(str(i) + '.mp4')
                i += 1
            else:
                video_names.append(share_desc + '.mp4')
            video_urls.append(each['share_info']['share_url'])
        return video_names, video_urls, nickname

"""
if __name__ == '__main__':
    # 创建对象
    sp = Spider()
    sp.run()
"""
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
温馨提示: 有些库是要自己去下载,一般使用命令在提示符下输入:pip install 自己要下载的库,如下图是博主下载的。

2、在文件夹doy_ying下新建第二个文件:run.py

代码:

# coding=utf-8
"""
@author: jiajiknag
程序功能: 测试抖音视频的下载
"""
from dou_ying_video_download import Spider
if __name__ == '__main__':
    # 创建类Spider()对象
    sp = Spider()
    # 运行开始下载
    sp.run()

3、结果

这是我在抖音中随便找的一个发布抖音视频比较少的来测试一下,以及我还下载了自己(Jjk:624609873(douying number))的抖音

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • python批量下载抖音视频

    本文实例为大家分享了python批量下载抖音视频的具体代码,供大家参考,具体内容如下 知识储备:博主是在Pycharm下进行的 文件夹:dou_ying 1:在文件夹doy_ying下新建第一个文件:dou_ying_video_download.py 代码: # coding=utf-8 """ @author: jiajiknag 程序功能:批量下载抖音视频 """ import requests import bs4 import os i

  • python批量爬取下载抖音视频

    本文实例为大家分享了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) ' 'Ve

  • Python爬虫 批量爬取下载抖音视频代码实例

    这篇文章主要为大家详细介绍了python批量爬取下载抖音视频,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 项目源码展示: ''' 在学习过程中有什么不懂得可以加我的 python学习交流扣扣qun,934109170 群里有不错的学习教程.开发工具与电子书籍. 与你分享python企业当下人才需求及怎么从零基础学习好python,和学习什么内容. ''' # -*- coding:utf-8 -*- from contextlib import closing import request

  • 如何用Python一次性下载抖音上音乐

    Python 链接抖音 python下载抖音内容的帖子网上有一些,但都比较麻烦,需要通过adb连接安卓手机后,模拟操作.我这么懒,这种事儿玩不来-那么,该如何获取抖音内容呢?网上搜了下大概有两种方式,一个是浏览器插件快抖,另外一个是我今天要说的抖音网页版.其实这两者差别不是很大,都是先将抖音内容下载至服务器后,通过开发简单网站配置域名后,让大家访问.让我们来看看抖音网页版: 爬虫实现分析 热歌榜内容 大家先开看看这个抖音热歌榜歌曲,每页20首歌曲,一个55页.但细不细心大家都能发现,很多歌曲存在

  • 使用python爬取抖音视频列表信息

    如果看到特别感兴趣的抖音vlogger的视频,想全部dump下来,如何操作呢?下面介绍介绍如何使用python导出特定用户所有视频信息 抓包分析 Chrome Deveploer Tools Chrome 浏览器开发者工具 在抖音APP端,复制vlogger主页地址, 比如: http://v.douyin.com/kGcU4y/ , 在PC端用chrome浏览器打卡,并模拟手机,这里选择iPhone, 然后把复制的主页地址,放到浏览器进行访问,页面跳转到 https://www.iesdouy

  • python爬取抖音视频的实例分析

    现在抖音的火爆程度,大家都是有目共睹的吧,之前小编在网络上发现好玩的事情,就是去爬取一些网站,因此,也考虑能否进行抖音上的破案去,在实际操作以后,真的实现出来了,利用自动化工具,就可以轻松实现了,后有小伙伴提出把appium去掉瘦身之后也是可以实现的,那么看下详细操作内容吧. 1.mitmproxy/mitmdump抓包 import requests path = 'D:/video/' num = 1788 def response(flow): global num target_urls

  • python3下载抖音视频的完整代码

    python3下载抖音视频的代码如下所示: # -*- coding:utf-8 -*- from contextlib import closing import requests, json, re, os, sys, random from ipaddress import ip_address from subprocess import Popen, PIPE import urllib class DouYin(object): def __init__(self, width =

  • 基于Python实现全自动下载抖音视频

    很多人喜欢玩抖音,我也喜欢看抖音小姐姐,可拿着手机一个个找视频太费劲.作为一个程序员,如何能在电脑前一边编程一边轻松地看抖音小姐姐呢? 下面利用Python,简单的三个步骤就可以将你喜欢的抖音小姐姐的视频自动下载下来了. Charles Charles是一个App抓包工具,与Filddler的功能相似,利用它可以得到App运行过程中发生的所有网络请求和响应内容. 在电脑端下载安装完Charles后,需要配置证书,最后开启SSL监听. 手机端则是需要与电脑在同一网络下,比如都连接家里的Wi-Fi,

  • python一键去抖音视频水印工具

    无水印视频下载 方法一: 无水印视频下载很简单,有一个通用的方法,就是使用去水印平台即可. 我使用的去水印平台是:http://douyin.iiilab.com/ 在输入框中输入视频链接点击视频解析,就可以获得无水印视频链接. 这个网站当初我写代码的时候是好使的,当初用这个网站下了一些无水印视频,不过写这篇文章的时候发现这个取水印平台无法正常解析了,等它修复好了再用这个功能吧. 这个平台不仅包括抖音视频去水印,还支持火山.快手.陌陌.美拍等无水印视频.所以做一个这个网站的接口还是很合适的. 简

  • 使用Python下载抖音各大V视频的思路详解

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 以下文章来源于Python七号 ,作者 somenzz Python爬虫.数据分析.网站开发等案例教程视频免费在线观看 https://space.bilibili.com/523606542 上次写了用 Python 批量下载知乎视频的方式,这次分享用 Python 批量下载抖音个人主页的全部无水印视频,本文重点不是提供一个好用的脚本,而是讲述如何写出这样的脚本,正所谓授人以鱼,不如授人

随机推荐