当前位置: 首页 > 后端技术 > Python

使用Python下载抖音无水印视频!

时间:2023-03-26 15:04:12 Python

关于Python爬虫、数据分析、数据挖掘的学习分享。最近发现如何下载没有水印的抖音视频。#抖音接口“url”参数值是从抖音复制过来的链接。先来看看Python下载,直接访问抖音链接得到的结果。适当的水印...接下来,打开浏览器的开发者工具,查看视频地址。可以发现“playAddr”是视频的地址,复制访问。链接重定向到以“v9”开头的链接,但仍然有水印。接下来是重点。首先,你需要让你的浏览器能够修改UA,也就是爬虫经常使用的“User-Agent”。我用的是Mac+GoogleChrome,说说我自己是怎么修改的吧。Windows请自行百度~首先在电脑的文档中建立一个文件夹。这个文件夹的路径如下。/Users/star-river/Documents/MyChrome并在根终端中运行以下代码。open-n/Applications/Google\Chrome.app/--args--disable-web-security--user-data-dir=/Users/star-river/Documents/MyChrome这样我的谷歌浏览器就可以成功更换UA了!或者直接访问抖音的链接,可以看到结果和原来的不一样。只需查找此模式下的接口即可。发现“?item_ids”开头的界面中有我们想要的无水印视频抖音。这是“play_addr”下列表中的两个链接。以“?item_ids”开头的接口有两个参数我们需要在另一个接口中获取。这样,我们也就知道了“item_ids”和“dytk”的参数值。但是我们直接通过浏览器访问得到的两个链接是不会直接显示视频的,需要和上面一样。也改变UA。如果这里的链接还是用“iPhoneX”的UA访问,就会失败。小F不知道为什么……把浏览器UA改成“Responsive”访问,链接会跳转。这样就完成了没有水印的抖音视频。但是如果每个视频都需要这样下载,那就太麻烦了。所以我用Python编写了可以下载视频的代码。importrequestsimportjsonimportreheaders={'accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8','accept-encoding':'gzip,deflate,br','accept-language':'zh-CN,zh;q=0.9,en;q=0.8','cache-control':'max-age=0',#this似乎很重要'User-Agent':'Mozilla/5.0(Linux;Android6.0;Nexus5Build/MRA58N)AppleWebKit/537.36(KHTML,likeGecko)Chrome/78.0.3904.108MobileSafari/537.36',}defdownload(url):"""下载抖音无水印视频"""#获取接口参数html=requests.get(url=url,headers=headers)title=re.findall('itemId:"(.*?)",',html.text)[0]dytk=re.findall('dytk:"(.*?)"}',html.text)[0]#拼接界面url_item='https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids='+title+'&dytk='+dytk#获取抖音无水印视频链接html_item=requests.get(url=url_item,headers=headers)#字符串转换字典content=json.loads(html_item.text)#视频接口url_video=content['item_list'][0]['video']['play_addr']['url_list'][1]response=requests.get(url_video,headers=headers,allow_redirects=True)#获取重定向链接,这也是无水印视频的下载链接,butThisisuselessredirect=response.urlprint(redirect)#视频是二进制的,需要这个下载方式video=requests.get(url_video,headers=headers).contentvideo_name="douyin.mp4"withopen(video_name,'wb')asf:f.write(video)f.flush()print("下载完成")if__name__=='__main__':#抖音linkurl='https://v.douyin.com/XJj85H/'download(url)完美的无水印视频下载界面现在你知道如何用Python下载视频了。然后小F为了方便大家下载,就把程序部署到了服务器上。你只需要通过小F接口下载视频即可,代码如下。fromflaskimportFlask,request,send_fileimportrequestsimportjsonimportreapp=Flask(__name__)#只接受get方法访问@app.route("/douyin/",methods=["GET"])defcheck():headers={'accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8','accept-encoding':'gzip,deflate,br','accept-language':'zh-CN,zh;q=0.9,en;q=0.8','cache-control':'max-age=0','User-Agent':'Mozilla/5.0(Linux;Android6.0;Nexus5Build/MRA58N)AppleWebKit/537.36(KHTML,likeGecko)Chrome/78.0.3904.108MobileSafari/537.36',}#默认返回内容return_dict={'code':1,'result':False,'msg':'Requestsucceeded'}#判断入参是否为空ifrequest.argsisNone:return_dict['return_code']='504'return_dict['return_info']='请求参数为空'returnjson.dumps(return_dict,ensure_ascii=False)#获取传入参数get_data=request.args.to_dict()url=get_data.get('url')#获取接口参数html=请求.get(url=url,headers=headers)title=re.findall('itemId:"(.*?)",',html.text)[0]dytk=re.findall('dytk:"(.*?)"}',html.text)[0]#拼接界面url_item='https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids='+title+'&dytk='+dytk#获取抖音无水印视频链接html_item=requests.get(url=url_item,headers=headers)#Stringtodictionarycontent=json.loads(html_item.text)#获取视频相关信息#data={}#视频说明#data['videoDesc']=content['item_list'][0]['desc']#视频封面图片,小图片#data['dynamiCoverUrl']=content['item_list'][0]['video']['dynamic_cover']['url_list'][0]#视频的封面图片,大图#data['staticCoverUrl']=content['item_list'][0]['video']['origin_cover']['url_list'][0]#视频的评论数#data['comments']=content['item_list'][0]['statistics']['comment_count']#视频的点赞数#data['prise']=content['item_list'][0]['statistics']['digg_count']#视频接口aceurl_video=content['item_list'][0]['video']['play_addr']['url_list'][1]response=requests.get(url_video,headers=headers,allow_redirects=True)#获取重定向链接,这也是无水印视频的下载链接,不过这次没用redirect=response.url#print(redirect)#视频下载链接#data['videoPlayAddr']=redirect#返回视频信息#return_dict['result']=data#返回结果#returnjson.dumps(return_dict,ensure_ascii=False)video=requests.get(url=redirect,headers=headers).contentvideo_name="douyin.mp4"withopen(video_name,'wb')asf:f.write(video)f.flush()returnsend_file('douyin.mp4')if__name__=="__main__":#本地调试app.run(debug=True)#在线部署#app.run(host='127.0.0.1',port=443)如果本地安装了Flask和Requests库,这个程序就ok了直接运行就可以下载你想要的无水印抖音视频。#如果本地接口http://127.0.0.1:500/douyin/?url=https://v.douyin.com/CoQBx1/部署在服务器上,则需要使用443端口,你的点赞收藏在文章的结尾是对我最大的鼓励!欢迎关注我,分享Python干货,交流Python技术。如果大家对文章有什么见解,或者有什么技术问题,欢迎在评论区留言讨论!