url带参数document.get_带大家重写个批量下载抖音视频的小脚本呀~

原文链接

带大家重写个批量下载抖音视频的小脚本呀~​mp.weixin.qq.com
dfd41b32acffbb9f534efa69c279dd4b.png

导语

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

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

相关文件

关注微信公众号"Charles的皮卡丘",公众号内回复"抖音"获取。

PS:代码仅供学习交流哦~

开发工具

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(即你可以在分享链接中看到):

d7666e6c95942f0c0cf01d65593c8f43.png

例如:

864e08578e718ccd14ea33f8bc3e4ba4.png

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

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是否正确,效果类似这样:

841633affc05384ab6a5d91c31a5dc59.png

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

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

效果如下:

知乎视频​www.zhihu.com

完整源代码

https://github.com/CharlesPikachu/Video-Downloader/tree/master/douyin

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值