注释都很详细,可以看看注释!友情提醒,仅供学习使用,请勿用于非法用途!

代码如下:

#requests模块用来get网页请求
#re模块用来正则
def take_video(http_):#_函数开始,一个名字叫做http_的参数
    headers = {#这里先设置一下协议头,因为需要手机的协议头来获取地址
        'User-Agent':'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.80 Mobile Safari/537.36'
    }
    bake_http = requests.get(http_,headers = headers,allow_redirects = False)#get用户输入的网址,提交协议头,并且把allow_redirects设置为False来禁止重定向
    regular_bake = re.findall(r'/video/(\d*)',bake_http.text,flags=re.M)#正则一下返回的文本,取出/video/后面的ID;\d*来表示0或者多个数字
    if regular_bake == None:#判断一下正则有没有成功,因为正则失败的话会返回一个None,不判断的话正则失败程序就会报错
        return '链接解析失败,失败位置:第一步'#如果没有成功,就返回失败,来提示第几步失败了
    else:
        bake_id = regular_bake[0]#成功的话就取出来正则的第一个匹配项,复制给变量ID;正则失败的话调用这个就会报错的!所以上面判断一下
    bake_http = requests.get('https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids='+ bake_id,headers = headers,allow_redirects = False)
    # 拼接一下取出来的ID,继续提交协议头和禁止重定向
    works_name = bake_http.json()['item_list'][0]['desc']#取出来返回Json格式中的作品名字,赋值给变量
    works_nickname = bake_http.json()['item_list'][0]['author']['nickname']#取出来返回Json格式中的作者名字,赋值给变量
    works_music = bake_http.json()['item_list'][0]['music']['play_url']['uri']#取出来返回Json格式中的作品音乐,赋值给变量
    if works_music == '':#这里判断一下作品的音乐是不是空白
        works_music = '原声';#如果是空白的话就代表作品用的自己录制的声音,就是原声
    works_pic = bake_http.json()['item_list'][0]['video']['cover']['url_list'][0]#取出来返回Json格式中的作品封面图片,赋值给变量
    works_video_url = str(bake_http.json()['item_list'][0]['video']['play_addr']['url_list'][0])#取出来返回Json格式中的视频URL,赋值给变量
    works_video_url = works_video_url.replace('/playwm/','/play/')#把视频URL中的/playwm/替换为/play/
    bake_http = requests.get(works_video_url,headers = headers,allow_redirects = False)#替换视频URL之后就开始Get这个网址,提交协议头,禁止重定向
    works_video_url = bake_http.text#取出来返回的文本内容
    regular_bake = re.findall(r'[a-zA-z]+://[^\s]*', bake_http.text, flags=re.M)#正则一下,取出来返回文本中的网址,[a-zA-z]+://[^\s]*来自精益编程助手
    if regular_bake == None:#同上,判断一下是否匹配失败
        return '链接解析失败,失败位置:第二步'#失败的话返回在第二步出错
    else:
        works_video_url = regular_bake[0]#成功的话就取出来第一个匹配项,就是无水印地址
    return f'作品标题:{works_name}\n作品作者:{works_nickname}\n作品图片:{works_pic}\n作品音乐:{works_music}\n作品无水印地址:{works_video_url}'
    #拼接一下取出来的各种值,拼接一下,返回
 
http_ = input('请输入抖音分享链接:')#程序跑起来,先运行这个
if http_.find('v.douyin.com/') == -1:#判断一下用户输入的是不是抖音链接
    print('您输入的不是抖音链接,应该是包含“v.douyin.com/”的链接形式!')#如果不是,就提示,然后结束运行、、、
else:
    http_ = take_video(http_)#如果是,就运行上面的名字叫做take_video的函数,并且把返回内容保存在http_的变量里
    print(http_)#输出http_