服务热线

400-123-4567
网站导航
新闻中心
当前位置: 首页 > 新闻中心

带大家重写个批量下载抖音视频的小脚本呀~

时间:2024-07-08 14:27:58 点击次数:
带大家重写个批量下载抖音视频的小脚本呀~

转眼又大半个月没更新公众号了,带大家重写个批量下载抖音视频的小脚本吧。其实去年还是前年是出过几个版本的,但是因为我自己是不用抖音的,所以就没打算再更新它。但是总有些人,关注了公众号之后拿了之前代码,发现不能用,就在后台留几句脏话,然后取关公众号。真的挺无语的,不过想想还是更新一下吧,毕竟没取关的还是占多数的。

废话不多说,让我们愉快地开始吧~

Python版本:3.6.4
相关模块:
requests模块;
execjs模块;
lxml模块;
click模块;
prettytable模块;
以及一些python自带的模块。
nodejs版本:v10.15.3

安装Python并添加到环境变量,pip安装需要的相关模块即可。

简单介绍一下实现的原理吧,首先随便搞个用户id,然后进入对应的抖音主页:

https://www.amemv.com/share/user/{用户id}

注意,用户id不等于用户抖音号,而是类似这样的uid(即你可以在分享链接中看到):

例如:

然后抓取一下用户的主页数据:

response=self.session.get(self.user_url.format(userid), headers=self.headers)
html=response.text
for key, value in self.font_dict.items():
    if key in html:
        html=html.replace(key, value)
assert 'dytk' in html
dytk=re.findall(r"dytk: '(.*?)'", html)[0]
tac=re.findall(r"<script>tac='(.*?)'</script>", html)[0]
html=etree.HTML(html)
nickname=html.xpath('//p[@class="nickname"]/text()')[0]
douyinid=''.join(html.xpath('//p[@class="shortid"]/i/text()'))
num_followers=''.join(html.xpath('//span[@class="follower block"]/span[1]//text()')).strip()
num_videos=''.join(html.xpath('//div[@class="user-tab active tab get-list"]/span/i/text()'))

其中dytk和tac这两个参数是必要的,其他数据是给代码使用者看的,用于确定自己输入的用户id是否正确,效果类似这样:

接着,我们可以通过请求如下接口来获取用户的所有视频作品数据:

https://www.iesdouyin.com/web/api/v2/aweme/post/

需要携带的参数如下:

params={
    'user_id': userid,
    'sec_uid': '',
    'count': '1000',
    'max_cursor': '0',
    'aid': '1128',
    '_signature': signature,
    'dytk': dytk
}
signature需要根据userid, tac和ua来计算.

请求这个接口可以直接返回所有视频作品的下载链接,所以只需要再写个视频下载的小脚本就ok啦:

'''视频下载'''
def __download(self, download_url, savename, savedir='.'):
    print('[INFO]: 正在下载 ——> %s' % savename)
    if not os.path.exists(savedir):
        os.mkdir(savedir)
    with closing(self.session.get(download_url, headers=self.ios_headers, stream=True, verify=False)) as response:
        total_size=int(response.headers['content-length'])
        if response.status_code==200:
            label='[FileSize]:%0.2f MB' % (total_size/(1024*1024))
            with click.progressbar(length=total_size, label=label) as progressbar:
                with open(os.path.join(savedir, savename+'.mp4'), "wb") as fp:
                    for chunk in response.iter_content(chunk_size=1024):
                        if chunk:
                            fp.write(chunk)
                            progressbar.update(1024)

大功告成~完整源代码详见相关文件。

在终端运行如下命令即可:

python douyin.py

效果如下:

github.com/CharlesPikac

Copyright © 2012-2020 星云-星云娱乐仪器分析类制造商 版权所有 非商用版本  琼ICP备54123456号

地址:广东省广州市天河区某某工业区88号 电话:400-123-4567 邮箱:admin@youweb.com

关注我们

平台注册入口