吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 12981|回复: 252
收起左侧

[原创工具] python爬取抖音无水印视频和图集以及皮皮虾最右无水印视频

    [复制链接]
向往同学吖 发表于 2023-10-26 11:02
本帖最后由 向往同学吖 于 2023-10-27 15:05 编辑

老活新整学习内容
刚刚更新了皮皮虾去水印和最右去水印这两个仅支持视频分享链接!源码也更新一波
有任何bug可以评论留言我看到会修复,谢谢各位


注:
目前抖音的分享链接仅支持手机端的分享链接,电脑端的分享链接区分不了视频和图集链接会出问题,大家先用手机端生成分享链接下载吧,感谢老哥发现的这个bug


日志:
2023/10/27更新:增加了下载可视化


附源代码
[Python] 纯文本查看 复制代码
import re
import requests
import os
from tqdm import tqdm

# 请求头
header = {
    "User-Agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Mobile Safari/537.36"}


# 抖音视频无水印
def videos(surl):
    print('正在解析抖音视频链接')
    # 获取video_id (重定向后的链接会变化具体我也没弄清楚就做了两种判断)
    if len(surl) > 60:
        id = re.search(r'video/(\d.*)/', surl).group(1)
    else:
        id = re.search(r'video/(\d.*)', surl).group(1)
    # print(id)
    # 获取json数据
    u_id = "https://m.douyin.com/web/api/v2/aweme/iteminfo/?item_ids={}&a_bogus=".format(id)
    v_rs = requests.get(url=u_id, headers=header).json()
    # titles = v_rs['item_list'][0]['desc']
    # 截取文案
    titles = re.search(r'^(.*?)[;;。.#]', v_rs['item_list'][0]['desc']).group(1)
    # print(titles)
    # 创建video文件夹
    if not os.path.exists('douyin/video'):
        os.makedirs('douyin/video')
    # 获取uri参数
    req = v_rs['item_list'][0]['video']['play_addr']['uri']
    # print("vvvvvv", req)
    print('正在下载无水印视频')
    # 下载无水印视频
    v_url = "https://www.douyin.com/aweme/v1/play/?video_id={}".format(req)
    v_req = requests.get(url=v_url, headers=header, stream=True)
    # 写入文件
    # 拿到文件的长度,并把total初始化为0
    total = int(v_req.headers.get('content-length', 0))
    # 打开当前目录的fname文件(名字你来传入)
    # 初始化tqdm,传入总数,文件名等数据,接着就是写入,更新等操作了
    with open(f'douyin/video/{titles}.mp4', 'wb') as file, tqdm(
            desc=f'{titles}.mp4',
            total=total,
            unit='iB',
            unit_scale=True,
            unit_divisor=1024,
    ) as bar:
        for data in v_req.iter_content(chunk_size=1024):
            size = file.write(data)
            bar.update(size)


# 抖音图片无水印
def pics(surl):
    print('正在解析抖音图片链接')
    # 获取id
    if len(surl) > 60:
        pid = re.search(r'note/(\d.*)/', surl).group(1)
    else:
        pid = re.search(r'note/(\d.*)', surl).group(1)
    # 获取json数据
    p_id = "https://m.douyin.com/web/api/v2/aweme/iteminfo/?reflow_source=reflow_page&item_ids={}&a_bogus=".format(pid)
    # print(p_id)
    p_rs = requests.get(url=p_id, headers=header).json()
    # print(p_rs)
    # 拿到images下的原图片
    images = p_rs['item_list'][0]['images']
    # 获取文案
    ptitle = re.search(r'^(.*?)[;;。.#]', p_rs['item_list'][0]['desc']).group(1).strip()
    # 创建pic文件夹
    if not os.path.exists('douyin/pic'):
        os.makedirs('douyin/pic')
    if not os.path.exists(f'douyin/pic/{ptitle}'):
        os.makedirs(f'douyin/pic/{ptitle}')
    print('正在下载无水印图片')
    # 下载无水印照片(遍历images下的数据)
    for i, im in enumerate(images):
        # 每一条数据下面都有四个原图链接这边用的是第一个
        p_req = requests.get(url=im['url_list'][0])
        # print(p_req)
        # 保存图片
        # 拿到文件的长度,并把total初始化为0
        total = int(p_req.headers.get('content-length', 0))
        # 打开当前目录的fname文件(名字你来传入)
        # 初始化tqdm,传入总数,文件名等数据,接着就是写入,更新等操作了
        with open(f'douyin/pic/{ptitle}/{str(i + 1)}.jpg', 'wb') as file, tqdm(
                desc=f'{ptitle + str(i + 1)}.jpg',
                total=total,
                unit='iB',
                unit_scale=True,
                unit_divisor=1024,
        ) as bar:
            for data in p_req.iter_content(chunk_size=1024):
                size = file.write(data)
                bar.update(size)


# 皮皮虾无水印视频
def ppx(surl):
    print('正在解析皮皮虾视频链接')
    xid = re.search(r'item/(.*)[?]', surl).group(1)
    # print(xid)
    pp_url = "https://h5.pipix.com/bds/webapi/item/detail/?item_id={}".format(xid)
    pp_req = requests.get(url=pp_url, headers=header).json()
    # print(pp_req)
    p_video = pp_req['data']['item']['comments'][0]['item']['video']['video_high']['url_list'][0]['url']
    if not os.path.exists('ppx/video'):
        os.makedirs('ppx/video')
    print('正在下载皮皮虾无水印视频')
    pp_v = requests.get(url=p_video, headers=header)
    # 拿到文件的长度,并把total初始化为0
    total = int(pp_v.headers.get('content-length', 0))
    # 打开当前目录的fname文件(名字你来传入)
    # 初始化tqdm,传入总数,文件名等数据,接着就是写入,更新等操作了
    with open(f'ppx/video/{xid}.mp4', 'wb') as file, tqdm(
            desc=f'{xid}.mp4',
            total=total,
            unit='iB',
            unit_scale=True,
            unit_divisor=1024,
    ) as bar:
        for data in pp_v.iter_content(chunk_size=1024):
            size = file.write(data)
            bar.update(size)


# 最右无水印
def zy(s_html, surl):
    # print(surl)
    print('正在解析最右视频链接')
    # 获取视频名称
    z_name = re.search(r'pid=(.*?)&', surl).group(1)
    if not os.path.exists('zuiyou/video'):
        os.makedirs('zuiyou/video')
    print('正在下载最右无水印视频')
    # 请求无水印视频地址
    z_url = re.search(r'x5-video-player-fullscreen="false" src="(.*)"\sposter=', s_html).group(1)
    z_res = requests.get(url=z_url, headers=header)
    # 拿到文件的长度,并把total初始化为0
    total = int(z_res.headers.get('content-length', 0))
    # 打开当前目录的fname文件(名字你来传入)
    # 初始化tqdm,传入总数,文件名等数据,接着就是写入,更新等操作了
    with open(f'zuiyou/video/{z_name}.mp4', 'wb') as file, tqdm(
            desc=f'{z_name}.mp4',
            total=total,
            unit='iB',
            unit_scale=True,
            unit_divisor=1024,
    ) as bar:
        for data in z_res.iter_content(chunk_size=1024):
            size = file.write(data)
            bar.update(size)


if __name__ == '__main__':
    print("抖音支持视频分享链接和图文分享链接")
    print("皮皮虾和最右仅支持视频分享链接")
    shares = input("请输入分享链接并按下回车键:")
    if re.search(r'/v.douyin.com/', shares) != None:
        # 提取分享链接后面的链接
        share = re.search(r'/v.douyin.com/(.*?)/', shares).group(1)
        # 请求链接
        share_url = "https://v.douyin.com/{}/".format(share)
    elif re.search(r'h5.pipix.com/', shares) != None:
        # 请求链接
        share_url = "{}".format(shares)
    elif re.search(r'share.xiaochuankeji.cn/', shares) != None:
        # 提取分享链接后面的链接
        share = re.search(r'>\s(.*)', shares).group(1)
        # 请求链接
        share_url = "{}".format(share)
    # print(share_url)
    s_html = requests.get(url=share_url, headers=header)
    # 获取重定向后的视频id
    surl = s_html.url
    # print(s_html.status_code)
    # print(surl)
    # 判断链接类型为视频分享类型
    if re.search(r'/video', surl) != None:
        videos(surl)
        quit = input('下载完成,按回车键退出程序。')
    # 判断链接类型为图集分享类型
    elif re.search(r'/note', surl) != None:
        pics(surl)
        quit = input('下载完成,按回车键退出程序。')
    elif re.search(r'h5.pipix.com/', surl) != None:
        ppx(surl)
        quit = input('下载完成,按回车键退出程序。')
    elif re.search(r'share.xiaochuankeji.cn/', shares) != None:
        zy(s_html.text, surl)
        quit = input('下载完成,按回车键退出程序。')
    else:
        quit = input('解析失败,按回车键退出程序。')



打包的exe程序
https://wwzw.lanzouj.com/iK2zy1czzina
密码:52pj

免费评分

参与人数 48吾爱币 +42 热心值 +45 收起 理由
yyyl + 1 用心讨论,共获提升!
FeelingsDog + 1 我很赞同!
upseem + 1 + 1 先拿走了,感谢抓包
zai2006 + 1 谢谢@Thanks!
lizh18 + 1 热心回复!
alexxi0571 + 1 谢谢@Thanks!
passerk + 1 + 1 谢谢@Thanks!
tengfei104106 + 1 我很赞同!
滚雪球 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
1031025361 + 1 + 1 谢谢@Thanks!
why3316 + 1 + 1 谢谢@Thanks!
w7456 + 1 + 1 谢谢@Thanks!
huang9126 + 1 + 1 谢谢@Thanks!
qwq23496 + 1 + 1 谢谢@Thanks!
qqxc74110 + 1 + 1 谢谢@Thanks!
jeck417 + 1 + 1 我很赞同!
fyj0811 + 1 + 1 谢谢@Thanks!
gaoajian + 1 已经处理,感谢您对吾爱破解论坛的支持!
laobj + 1 谢谢@Thanks!
roy1218 + 1 + 1 鼓励转贴优秀软件安全工具和文档!
好人卡 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
blworld + 1 谢谢@Thanks!
梦魇_Hex + 1 + 1 我很赞同!
binyue1985 + 1 + 1 谢谢@Thanks!
XaoTao + 1 + 1 鼓励转贴优秀软件安全工具和文档!
heicloud + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
leojayer + 1 + 1 谢谢@Thanks!
gorbydon + 1 + 1 我很赞同!
北漂的阿达西 + 1 + 1 我很赞同!
hanxu2128 + 1 + 1 谢谢@Thanks!
cryschao + 1 + 1 谢谢@Thanks!
procurve + 1 + 1 谢谢@Thanks!
uuwatch + 1 + 1 有用系列!
Zercher + 1 我很赞同!
YQC16 + 1 + 1 谢谢@Thanks!
cyongch + 1 + 1 谢谢@Thanks!
lwz126123 + 1 我很赞同!
18176513114 + 1 谢谢@Thanks!
shdchaxinih + 1 + 1 谢谢@Thanks!
wuai5685525 + 1 + 1 我很赞同!
EHOOD + 1 + 1 谢谢@Thanks!
hwh425 + 1 谢谢@Thanks!
hunterDDR4 + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
cj831124 + 1 + 1 谢谢@Thanks!
schtg + 1 + 1 谢谢@Thanks!
qinni8513 + 1 + 1 谢谢@Thanks!
confiant + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
风之暇想 + 7 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| 向往同学吖 发表于 2023-11-9 08:23
1122zhu 发表于 2023-11-8 16:29
又更新了吗 闪退了

最近没时间更新
 楼主| 向往同学吖 发表于 2023-10-29 05:57
shdchaxinih 发表于 2023-10-28 21:21
感谢分享。
尝试了几个链接,都可以下载。
有几个情况请教:

视频名字我是拿的他写的文案 忘记可能没有文案的视频了,过几天我改一下,目前仅支持耽搁下载 多个下载以后也更新一下
jgqmzx 发表于 2023-10-26 14:05
shesheep 发表于 2023-10-26 14:14
会闪退啥原因
ydydq 发表于 2023-10-26 14:24
感谢大佬分享。咋个抓这个包呢
happydog008 发表于 2023-10-26 15:06
可以实现抓取留言内容么
guogms1022 发表于 2023-10-26 15:17
报毒,感觉有问题
 楼主| 向往同学吖 发表于 2023-10-26 15:42
guogms1022 发表于 2023-10-26 15:17
报毒,感觉有问题

我用的pyinstaller 打的包不清楚为啥会报毒 你可以直接复制源码运行
 楼主| 向往同学吖 发表于 2023-10-26 15:43

你哪个分享链接 发给我 我看看
 楼主| 向往同学吖 发表于 2023-10-26 15:44
happydog008 发表于 2023-10-26 15:06
可以实现抓取留言内容么

你说的是抖音的评论吗?我在分析包的时候找到过视频下面的评论的包
 楼主| 向往同学吖 发表于 2023-10-26 15:45
ydydq 发表于 2023-10-26 14:24
感谢大佬分享。咋个抓这个包呢

我在csdn上发了详细的帖子你可以看看也是我自己写的https://blog.csdn.net/m0_50860574/article/details/134040048

点评

感谢。去学习哈  发表于 2023-10-30 22:25
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 提醒:禁止复制他人回复等『恶意灌水』行为,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-29 05:22

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表