查看: 340|回复: 6

[python] 无水印爬取抖音视频

[复制链接]
发表于 2022-5-10 23:52 来自手机 | 显示全部楼层 |阅读模式
禁止求评分、诱导评分、互刷评分、互刷悬赏值,违规者封号处理。
禁止发布推广、邀请码、邀请链接、二维码或者有利益相关的任何推广行为。
所有非原创软件请发布在【精品软件区】,发帖必须按照本版块版规格式发帖。

本帖最后由 MULIN 于 2022-5-10 23:53 编辑

分享链接获取

id的获取

源码[mw_shl_code=python,true]import requests
import re
import os
from selenium import webdriver

header = {
    "user-agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
                  'Chrome/101.0.4951.54 Safari/537.36 Edg/101.0.1210.39 '
}


def get_video_id(video_url):
    """
    根据视频链接,获得视频的id
    """
    option = webdriver.ChromeOptions()
    option.add_argument("--headless")
    option.add_argument('user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, '
                        'like Gecko) Chrome/96.0.4664.110 Safari/537.36')
    driver = webdriver.Chrome(options=option)
    driver.get(video_url)
    # 获得源码
    html = driver.page_source

    id_pattern = '<div class="IsE_azet">.*?from_gid=(.*?)&'
    video_id = re.findall(id_pattern, html)

    return video_id[0]


def get_video_info(video_id):
    """
    利用video_id 获得视频的一些信息,作者,无水印链接等
    """
    video_info_url = f'https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids={video_id}'

    # 获得视频的信息
    resp = requests.get(video_info_url, headers=header)
    video_info_json = resp.json()
    resp.close()

    # 获取作者名字
    author_name = video_info_json['item_list'][0]['author']['nickname']
    # 获取视频标题
    video_title_tmp = video_info_json['item_list'][0]['share_info']['share_title']
    if video_title_tmp.startswith('#'):
        video_title = video_title_tmp.split('#')[1].split('@')[0]
    else:
        video_title = video_title_tmp.split('#')[0].split('@')[0]
    # 用于保存文件的名字
    title = author_name + '-' + video_title + '-' + video_id
    # 获取视频的无水印地址,wm=watermark
    video_true_url = video_info_json['item_list'][0]['video']['play_addr']['url_list'][0].replace('/playwm/', '/play/')

    return title, video_true_url


def download(title, video_true_url):
    """
    下载视频
    """
    # 创建存放位置
    path = '../dy_video'
    if os.path.exists(path):
        pass
    else:
        os.makedirs(path)

    # 获取视频
    resp = requests.get(video_true_url, headers=header)
    content = resp.content
    resp.close()
    # 下载视频
    with open(f'../dy_video/{title}.mp4', 'wb') as f:
        f.write(content)

    print("视频下载完成!")
    print(f"视频名字为:{title}.mp4")


def main():
    """
    主程序
    """
    url_or_id = str(input("输入分享链接或者视频id:"))
    if len(url_or_id) == 19:
        # 长度小于30,是一个视频id,id长度为19
        print('输入的是视频id。')
        title, video_true_url = get_video_info(url_or_id)
        download(title, video_true_url)
    else:
        # 是一个分享链接
        print('输入的是视频分享链接。')
        video_url = url_or_id.split(" ")[-2]
        video_id = get_video_id(video_url)
        title, video_true_url = get_video_info(video_id)
        download(title, video_true_url)


if __name__ == '__main__':
    main()[/mw_shl_code]


下载效果
214637tch37cc6gq8cqmw3.png
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2022-5-10 23:52 | 显示全部楼层
感谢楼主分享
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2022-5-10 23:52 | 显示全部楼层
谢谢大佬分享
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2022-5-10 23:53 | 显示全部楼层
多谢楼主分享
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2022-5-11 00:26 | 显示全部楼层
谢谢分享!
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2022-5-11 01:04 | 显示全部楼层
谢谢分享
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2022-5-11 09:03 | 显示全部楼层
谢谢分享
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

关注公众号

相关侵权、举报、投诉及建议等,请发 E-mail:admin@discuz.vip

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖
关注公众号
返回顶部