查看:53693|回复:8
收起左侧

python爬取抖音无水印视频和图集以及皮皮虾最右无水印视频

 [复制链接]

TA的专栏

  • 打卡等级:炽炎魔

今日最高分:0

今日排行:未上榜

等级头衔

等級:版主

活跃状态

102

主题

432

回帖

330

积分

积分货币
祝福
1065 颗
灵魂
273 颗
玛雅
84418 颗
元宝
167 锭
积分
1769 枚
注册时间
2023-10-24
最后登录
2024-9-20

联系方式

QQ
QQ

违规信息
违规:0

荣誉勋章

实力无需隐藏优秀的企鹅勇者大陆炉石

    发表于 2023-11-2 21:48:51|显示全部楼层|阅读模式
    星级打分
    • 1
    • 2
    • 3
    • 4
    • 5
    平均分:0  参与人数:0  我的评分:未评
    老活新整学习内容
    刚刚更新了皮皮虾去水印和最右去水印这两个仅支持视频分享链接!源码也更新一波
    有任何bug可以评论留言我看到会修复,谢谢各位
    注:
    目前抖音的分享链接仅支持手机端的分享链接,电脑端的分享链接区分不了视频和图集链接会出问题,大家先用手机端生成分享链接下载吧,感谢老哥发现的这个bug
    日志:
    2023/10/27更新:增加了下载可视化
    附源代码
    1. import re
    2. import requests
    3. import os
    4. from tqdm import tqdm

    5. # 请求头
    6. header = {
    7.     "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"}


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


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


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


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


    145. if __name__ == '__main__':
    146.     print("抖音支持视频分享链接和图文分享链接")
    147.     print("皮皮虾和最右仅支持视频分享链接")
    148.     shares = input("请输入分享链接并按下回车键:")
    149.     if re.search(r'/v.douyin.com/', shares) != None:
    150.         # 提取分享链接后面的链接
    151.         share = re.search(r'/v.douyin.com/(.*?)/', shares).group(1)
    152.         # 请求链接
    153.         share_url = "https://v.douyin.com/{}/".format(share)
    154.     elif re.search(r'h5.pipix.com/', shares) != None:
    155.         # 请求链接
    156.         share_url = "{}".format(shares)
    157.     elif re.search(r'share.xiaochuankeji.cn/', shares) != None:
    158.         # 提取分享链接后面的链接
    159.         share = re.search(r'>\s(.*)', shares).group(1)
    160.         # 请求链接
    161.         share_url = "{}".format(share)
    162.     # print(share_url)
    163.     s_html = requests.get(url=share_url, headers=header)
    164.     # 获取重定向后的视频id
    165.     surl = s_html.url
    166.     # print(s_html.status_code)
    167.     # print(surl)
    168.     # 判断链接类型为视频分享类型
    169.     if re.search(r'/video', surl) != None:
    170.         videos(surl)
    171.         quit = input('下载完成,按回车键退出程序。')
    172.     # 判断链接类型为图集分享类型
    173.     elif re.search(r'/note', surl) != None:
    174.         pics(surl)
    175.         quit = input('下载完成,按回车键退出程序。')
    176.     elif re.search(r'h5.pipix.com/', surl) != None:
    177.         ppx(surl)
    178.         quit = input('下载完成,按回车键退出程序。')
    179.     elif re.search(r'share.xiaochuankeji.cn/', shares) != None:
    180.         zy(s_html.text, surl)
    181.         quit = input('下载完成,按回车键退出程序。')
    182.     else:
    183.         quit = input('解析失败,按回车键退出程序。')
    复制代码
    下载软件

    游客,如果您要查看本帖隐藏内容请回复


    吾爱一起玩儿,一个游戏爱好者的聚集地!《新会员请仔细阅读入坑须知!发布资源请阅读资源分享规则!》用户组达到[戈登]后可修改此签名!

    TA的专栏

    • 打卡等级:海魔希特拉

    今日最高分:0

    今日排行:未上榜

    等级头衔

    等級:哥布林

    活跃状态

    15

    主题

    32

    回帖

    81

    积分

    积分货币
    祝福
    234 颗
    灵魂
    159 颗
    玛雅
    9646 颗
    元宝
    5 锭
    积分
    416 枚
    注册时间
    2023-10-20
    最后登录
    2024-3-25

    联系方式

    QQ
    QQ

    违规信息
    违规:1

    荣誉勋章

      发表于 2023-11-5 10:57:39|显示全部楼层
      我是看不懂,但看帖回复是美德,赞一个666
      [发帖际遇]: 烂泥盖青春 在失落之塔游走时捡到 510 颗 玛雅,偷偷放进了口袋.幸运榜 / 衰神榜
      我要说一句
      吾爱一起玩儿,一个游戏爱好者的聚集地!《新会员请仔细阅读入坑须知!发布资源请阅读资源分享规则!》用户组达到[戈登]后可修改此签名!

      TA的专栏

      • 打卡等级:炽炎魔

      今日最高分:0

      今日排行:未上榜

      等级头衔

      等級:哥布林

      活跃状态

      0

      主题

      474

      回帖

      91

      积分

      积分货币
      祝福
      235 颗
      灵魂
      1 颗
      玛雅
      17777 颗
      元宝
      0 锭
      积分
      490 枚
      注册时间
      2023-11-27
      最后登录
      2024-9-19

      联系方式

      违规信息
      违规:0

      荣誉勋章

        发表于 2023-11-29 04:37:25|显示全部楼层
        希望楼主多发精品好帖
        我要说一句
        吾爱一起玩儿,一个游戏爱好者的聚集地!《新会员请仔细阅读入坑须知!发布资源请阅读资源分享规则!》用户组达到[戈登]后可修改此签名!

        TA的专栏

        • 打卡等级:炽炎魔

        今日最高分:0

        今日排行:未上榜

        等级头衔

        等級:哥布林

        活跃状态

        0

        主题

        516

        回帖

        98

        积分

        积分货币
        祝福
        255 颗
        灵魂
        1 颗
        玛雅
        18032 颗
        元宝
        0 锭
        积分
        530 枚
        注册时间
        2023-11-27
        最后登录
        2024-9-19

        联系方式

        违规信息
        违规:0

        荣誉勋章

          发表于 2023-11-30 19:01:01|显示全部楼层
          顶一个!
          我要说一句
          吾爱一起玩儿,一个游戏爱好者的聚集地!《新会员请仔细阅读入坑须知!发布资源请阅读资源分享规则!》用户组达到[戈登]后可修改此签名!

          TA的专栏

          • 打卡等级:炽炎魔

          今日最高分:0

          今日排行:未上榜

          等级头衔

          等級:哥布林

          活跃状态

          0

          主题

          452

          回帖

          87

          积分

          积分货币
          祝福
          224 颗
          灵魂
          1 颗
          玛雅
          17714 颗
          元宝
          0 锭
          积分
          468 枚
          注册时间
          2023-11-27
          最后登录
          2024-9-19

          联系方式

          违规信息
          违规:0

          荣誉勋章

            发表于 2023-11-30 19:53:03|显示全部楼层
            看了这么多帖子,第一次看到这么有深度了!
            我要说一句
            吾爱一起玩儿,一个游戏爱好者的聚集地!《新会员请仔细阅读入坑须知!发布资源请阅读资源分享规则!》用户组达到[戈登]后可修改此签名!

            TA的专栏

            • 打卡等级:炽炎魔

            今日最高分:0

            今日排行:未上榜

            等级头衔

            等級:哥布林

            活跃状态

            0

            主题

            484

            回帖

            93

            积分

            积分货币
            祝福
            242 颗
            灵魂
            1 颗
            玛雅
            18059 颗
            元宝
            0 锭
            积分
            504 枚
            注册时间
            2023-11-27
            最后登录
            2024-9-19

            联系方式

            违规信息
            违规:0

            荣誉勋章

              发表于 2023-12-16 08:18:06|显示全部楼层
              学习了,谢谢!
              我要说一句
              吾爱一起玩儿,一个游戏爱好者的聚集地!《新会员请仔细阅读入坑须知!发布资源请阅读资源分享规则!》用户组达到[戈登]后可修改此签名!

              TA的专栏

              • 打卡等级:炽炎魔

              今日最高分:0

              今日排行:未上榜

              等级头衔

              等級:哥布林

              活跃状态

              0

              主题

              481

              回帖

              92

              积分

              积分货币
              祝福
              239 颗
              灵魂
              1 颗
              玛雅
              17505 颗
              元宝
              0 锭
              积分
              498 枚
              注册时间
              2023-11-27
              最后登录
              2024-9-19

              联系方式

              违规信息
              违规:0

              荣誉勋章

                发表于 2023-12-16 22:24:04|显示全部楼层
                有机会找楼主好好聊聊!
                我要说一句
                吾爱一起玩儿,一个游戏爱好者的聚集地!《新会员请仔细阅读入坑须知!发布资源请阅读资源分享规则!》用户组达到[戈登]后可修改此签名!

                TA的专栏

                • 打卡等级:炽炎魔

                今日最高分:0

                今日排行:未上榜

                等级头衔

                等級:哥布林

                活跃状态

                0

                主题

                525

                回帖

                100

                积分

                积分货币
                祝福
                261 颗
                灵魂
                1 颗
                玛雅
                18445 颗
                元宝
                0 锭
                积分
                542 枚
                注册时间
                2023-11-27
                最后登录
                2024-9-19

                联系方式

                违规信息
                违规:0

                荣誉勋章

                  发表于 2023-12-25 22:37:15|显示全部楼层
                  楼主的等级很高啊!
                  我要说一句
                  吾爱一起玩儿,一个游戏爱好者的聚集地!《新会员请仔细阅读入坑须知!发布资源请阅读资源分享规则!》用户组达到[戈登]后可修改此签名!

                  TA的专栏

                  • 打卡等级:炽炎魔

                  今日最高分:0

                  今日排行:未上榜

                  等级头衔

                  等級:哥布林

                  活跃状态

                  0

                  主题

                  460

                  回帖

                  88

                  积分

                  积分货币
                  祝福
                  230 颗
                  灵魂
                  1 颗
                  玛雅
                  17857 颗
                  元宝
                  0 锭
                  积分
                  480 枚
                  注册时间
                  2023-11-27
                  最后登录
                  2024-9-19

                  联系方式

                  违规信息
                  违规:0

                  荣誉勋章

                    发表于 2023-12-26 19:36:45|显示全部楼层
                    好帖子!
                    我要说一句
                    吾爱一起玩儿,一个游戏爱好者的聚集地!《新会员请仔细阅读入坑须知!发布资源请阅读资源分享规则!》用户组达到[戈登]后可修改此签名!

                    本版积分规则