Python实现超简单【抖音】无水印视频批量下载

前言

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

作者:python乱炖

PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取http://t.cn/A6Zvjdun

01 获取你喜欢的拍客的视频url

即抖音用户主页的url,我将以罗永浩的主页连接为例(本人第一次下载抖音就是冲着罗永浩去的,所以也只关注了他一个人)

1. 获取主页链接

打开抖音,点进用户的主页面,点击右上角的三个点:
在这里插入图片描述
选择分享:
在这里插入图片描述
再点击复制链接即可,我们可以获取如下url:https://v.douyin.com/JJ8b6Hq/

2. 获取重定向链接

我们只需要将上面这个链接粘贴到chrome浏览器,就可以获取到重定向链接
在这里插入图片描述
重定向后的链接:

https://www.iesdouyin.com/share/user/4195355415549012?u_code=c23d6456gli&sec_uid=MS4wLjABAAAAlwXCzzm7SmBfdZAsqQ_wVVUbpTvUSX1WC_x8HAjMa3gLb88-MwKL7s4OqlYntX4r&timestamp=1590603009&utm_source=copy&utm_campaign=client_share&utm_medium=android&share_app_name=douyin
  • 1

现在我们需要记住url中/user后面的一串数字,也就是4195355415549012,这是我们的用户id。以后只要有了这样的用户ID,直接替换进url即可(时间戳也需要修改一下)

02 获取用户下面的所有的视频id

我们刚刚获取了视频主页的链接,现在我们要通过主页链接来获取当前页面下的所有视频。为了方便我们观看和调试,我们将Chrome开成iPhone模式。
在这里插入图片描述
1. 获取请求链接

将Network设置成XHR,重新刷新一下页面,获取请求内容:
在这里插入图片描述
我们可以看到上面选中的那个请求,返回的是一串json,我们将内容复制下来看看,搜索返回的json中有关video的字段,通过下图我们就可以看到video里面有个url_list,里面有两个不同的url,这两个url其实就是视频相关的地址了,但是还有点问题,这两个url点进去并不能直接看到视频。
在这里插入图片描述
2. 获取视频链接

这里我们需要将url做一点点修改。我们将/play修改成/playmw就可以了,这个时候我们发现,这两个视频地址被重定向成正常的视频地址了。(下面来说为什么要加mw,这个代表什么)
在这里插入图片描述
这样我们就相当于顺利拿到视频的地址了,我们可以去json中获取所有的视频url链接:

pattern = re.compile('"(https://aweme.snssdk.com/aweme/v1/play/.*?)"')
result = pattern.findall(data)
result = [i.replace("/play/", "/playwm/") for i in result]
for i in result:
    print(i)
  • 1
  • 2
  • 3
  • 4
  • 5

在这里插入图片描述
3. 水印问题

关于水印问题,看了简书上有篇文章有介绍,水印与无水印之间的区别,这边我就不作详细介绍了。其实我们一开始拿到的url就是无水印的,但是链接本身并没重定向到无水印的视频,加上wm之后,url会重定向到有水印的视频。
在这里插入图片描述

完整代码

import re
import requests
import os
header = {
    "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
    "accept-encoding": "gzip, deflate, sdch, br",
    "accept-language": "en-US,en;q=0.8,zh-CN;q=0.6,zh;q=0.4",
    "cache-control": "no-cache",
    "x-tt-logid": "202005280227480100140460221A4FD1CF",
    "x-tt-trace-host": "01ec7cfa064a667fc06b9359628310d7439e62ebd3f237434a2ab55522586ad295c69c0af06484df374b32e14ddb3f000f9912025769ad3b7c6273355e56a9332d1901cddf01df6db00b0b6f4b3f159082",
    'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1',
    'cookie': 'tt_webid=6831576518742705677; _ba=BA0.2-20200528-5199e-qC83gMfiQQZIHGPAbWkc; _ga=GA1.2.1655972543.1590600365; _gid=GA1.2.843249182.1590600365'
}
data = {
    "sec_uid": "MS4wLjABAAAAlwXCzzm7SmBfdZAsqQ_wVVUbpTvUSX1WC_x8HAjMa3gLb88-MwKL7s4OqlYntX4r",
    "count": "21",
    "max_cursor": "0",
    "aid": "1128",
    "_signature": "1rexVRAciIE-bZMoZ46qv9a3sU",
    "dytk": "96ad80961288263ad9d1cff2895d0636"
}
url = "https://www.iesdouyin.com/web/api/v2/aweme/post"
url = "https://www.iesdouyin.com/share/user/4195355415549012?u_code=c23d6456gli&sec_uid=MS4wLjABAAAAlwXCzzm7SmBfdZAsqQ_wVVUbpTvUSX1WC_x8HAjMa3gLb88-MwKL7s4OqlYntX4r&timestamp=1590603009&utm_source=copy&utm_campaign=client_share&utm_medium=android&share_app_name=douyin"

response = requests.get(url, headers=header)


data = response.text
pattern = re.compile('"(https://aweme.snssdk.com/aweme/v1/play/.*?)"')
result = pattern.findall(data)
result = [i.split("&ratio")[0] for i in result]
result2 = [i.replace("/play/", "/playwm/") for i in result]

for i in result:
    print(i)
headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.92 Safari/537.36',
}
if not os.path.exists("无水印"):
    os.mkdir("无水印")
if not os.path.exists("水印"):
    os.mkdir("水印")

count = 0
for res1 in result:
    count += 1
    videoBin = requests.get(res1, timeout=5, headers=headers)
    with open(f'无水印/{count}.mp4', 'wb') as fb:
        fb.write(videoBin.content)
count = 0
for res2 in result2:
    count += 1
    videoBin = requests.get(res2, timeout=5, headers=headers)
    with open(f'水印/{count}.mp4', 'wb') as fb:
        fb.write(videoBin.content)
Python中利用网络爬虫技术下载抖音水印图片,通常会涉及到以下几个步骤: 1. **安装必要的库**: 首先需要安装`requests`库用于发送HTTP请求获取网页内容,以及`beautifulsoup4`库解析HTML结构。 ```bash pip install requests beautifulsoup4 ``` 2. **分析网页结构**: 使用浏览器的开发者工具查看目标图片的URL,因为抖音可能会对直接访问的链接加水印,而通过JavaScript动态加载的图片则可能是无水印的。你需要找到加载图片数据的部分并理解其请求规律。 3. **发送请求获取图片**: 根据分析结果,编写Python代码发送GET请求,获取无水印图片的URL。例如,如果图片在JSON响应中,可以解析出来。 ```python import requests import json def get_image_url(response): # 解析JSON获取图片URL data = json.loads(response.text) image_url = data.get('image_url') # 假设这是一个键名 return image_url response = requests.get('https://example.com/api/image') image_url = get_image_url(response) ``` 4. **下载图片**: 获取到无水印图片URL后,使用`requests`库下载图片,并保存到本地。 ```python from PIL import ImageGrab import os def download_image(url, save_path='images'): response = requests.get(url, stream=True) if response.status_code == 200: with open(os.path.join(save_path, 'image.jpg'), 'wb') as f: for chunk in response.iter_content(chunk_size=1024): f.write(chunk) f.flush() else: print(f"Failed to download image, status code: {response.status_code}") download_image(image_url) ``` 5. **处理可能出现的问题**: - 抓取过程中可能遇到反爬机制,需要设置合适的User-Agent、频率限制,甚至可能需要登录验证。 - 图片URL可能有防盗链措施,可能需要处理cookies或session。 注意:在实际操作中,务必遵守网站的robots.txt协议,尊重版权,并确保你的爬虫活动不会对服务器造成过大的负担。同时,频繁抓取大量数据可能违反平台的服务条款,所以合理使用爬虫是非常重要的。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值