吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 11600|回复: 39
上一主题 下一主题
收起左侧

[Python 转载] 百度旗下好看视频平台中短视频的地址解析及下载

  [复制链接]
跳转到指定楼层
楼主
baolinguo 发表于 2021-9-16 00:44 回帖奖励
好看视频是百度旗下的短视频平台,里面有海量好看的短视频,遇到我们喜欢的,要如何下载呢。下面直接给出python语言中地址的解析及各种不同格式视频的下载。
[Python] 纯文本查看 复制代码
#encoding:utf-8
# 好看视频下载

import socket
from urllib.request import urlopen
import urllib
import re
import time
from pyquery import PyQuery as pq
import requests
from tqdm import tqdm # 打印进度条的库
import gzip

print('程序开始运行。。。')
requests.adapters.DEFAULT_RETRIES = 5
# connect to a URL
timeout = 30
socket.setdefaulttimeout(timeout)#这里对整个socket层设置超时时间。后续文件中如果再使用到socket,不必再设置
sleep_download_time = 3
time.sleep(sleep_download_time) #这里时间自己设定

# 输入好看视频地址
haokanurl = input('请输入要下载的好看视频的网页地址:')
# haokanurl = 'https://haokan.baidu.com/v?vid=7448757459481911514&tab=yinyue_new'#示例地址

#为了避免出现403提示,这里伪装浏览器
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0'}
req = urllib.request.Request(url=haokanurl, headers=headers)
website = urlopen(req,timeout = 90)
print('好看视频下载地址解析中')

# read html code
html = website.read().decode('UTF-8')
#html = website.read().decode()
#当使用上面的直接decode()出错时可以使用下面的方法
# html = website.read()
# buff = BytesIO(html)
# f = gzip.GzipFile(fileobj=buff)
# html = f.read().decode('utf-8')
website.close()

# use re.findall to get all the links

# 取得视频名称(标题)
videotitle = re.findall('<h1 class="videoinfo-title">(.*?)</h1>',html)[0]
print(videotitle)
# 默认地址
links = re.findall('"playurl":"(.*)","clarityUrl"',html)#默认地址
downurl = links[0]
downurl = downurl.replace('\\','')
print('视频实际地址:')
print(downurl)
print('现在开始下载该视频,请稍等。。。')
res = requests.get(downurl, headers={'user-agent': 'chrome'})
total_size = round(int(res.headers["Content-Length"])/1024/1024)
print('解析完成,视频大小为:' + str(total_size) + 'MB。现在开始下载。')
with open(f'{videotitle}down.mp4', 'wb') as f:
     for chunk in tqdm(iterable=res.iter_content(1024*1024), total=total_size, unit='KB'):\
         f.write(chunk)
     print('下载完成。')

sdlinks = re.findall('"key":"sd","rank":0,"title":"(.*?)","videoBps":',html)[0]#标清地址
sdlinks = re.findall('"url":"(.*)',sdlinks)
sdurl = sdlinks[0]
sdurl = sdurl.replace('\\','')
print('标清视频地址是:')
print(sdurl)
print('现在开始下载标清视频,请稍等。。。')
res = requests.get(sdurl, headers={'user-agent': 'chrome'})
total_size = round(int(res.headers["Content-Length"])/1024/1024)
print('解析完成,视频大小为:' + str(total_size) + 'MB。现在开始下载。')
with open(f'{videotitle}标清.mp4', 'wb') as f:
     for chunk in tqdm(iterable=res.iter_content(1024*1024), total=total_size, unit='KB'):\
         f.write(chunk)
     print('下载完成。')


hdlinks = re.findall('"key":"hd","rank":1,"title":"(.*?)","videoBps":',html)[0]#高清地址
hdlinks = re.findall('"url":"(.*)',hdlinks)
hdurl = hdlinks[0]
hdurl = hdurl.replace('\\','')
print('高清视频地址是:')
print(hdurl)
print('现在开始下载高清视频,请稍等。。。')
res = requests.get(hdurl, headers={'user-agent': 'chrome'})
total_size = round(int(res.headers["Content-Length"])/1024/1024)
print('解析完成,视频大小为:' + str(total_size) + 'MB。现在开始下载。')
with open(f'{videotitle}高清.mp4', 'wb') as f:
     for chunk in tqdm(iterable=res.iter_content(1024*1024), total=total_size, unit='KB'):\
         f.write(chunk)
     print('下载完成。')


sclinks = re.findall('"key":"sc","rank":2,"title":"(.*?)","videoBps":',html)[0]#超清地址
sclinks = re.findall('"url":"(.*)',sclinks)
scurl = sclinks[0]
scurl = scurl.replace('\\','')
print('超清视频地址是:')
print(scurl)
print('现在开始下载超清视频,请稍等。。。')
res = requests.get(scurl, headers={'user-agent': 'chrome'})
total_size = round(int(res.headers["Content-Length"])/1024/1024)
print('解析完成,视频大小为:' + str(total_size) + 'MB。现在开始下载。')
with open(f'{videotitle}超清.mp4', 'wb') as f:
     for chunk in tqdm(iterable=res.iter_content(1024*1024), total=total_size, unit='KB'):\
         f.write(chunk)
     print('下载完成。')


p1080links = re.findall('"key":"1080p","rank":3,"title":"(.*?)","videoBps":',html)[0]#蓝光地址
p1080links = re.findall('"url":"(.*)',p1080links)
p1080url = p1080links[0]
p1080url = p1080url.replace('\\','')
print('蓝光视频地址是:')
print(p1080url)
print('现在开始下载蓝光视频,请稍等。。。')
res = requests.get(p1080url, headers={'user-agent': 'chrome'})
total_size = round(int(res.headers["Content-Length"])/1024/1024)
print('解析完成,视频大小为:' + str(total_size) + 'MB。现在开始下载。')
with open(f'{videotitle}蓝光.mp4', 'wb') as f:
     for chunk in tqdm(iterable=res.iter_content(1024*1024), total=total_size, unit='KB'):\
         f.write(chunk)
     print('下载完成。')

print('所有格式视频下载完成,请检查是否正确。')


当然了,这里使用的是最笨的方法,代码可以进行优化,如你有兴趣,自己去处理吧。

免费评分

参与人数 10吾爱币 +14 热心值 +10 收起 理由
李舜禹ETF + 1 + 1 谢谢@Thanks!
hugbug + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
独行风云 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
vipcrack + 1 + 1 很好用,下载很快
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
李杨 + 1 + 1 我很赞同!
shiyucj + 1 + 1 我很赞同!
wqw1978 + 1 + 1 谢谢@Thanks!
sdaza + 1 谢谢@Thanks!
地狱天堂? + 1 + 1 谢谢@Thanks!

查看全部评分

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

推荐
 楼主| baolinguo 发表于 2021-12-11 02:28 |楼主
githubi 发表于 2021-12-7 19:06
你好,我说的意思是爬虫代码中,视频的真正下载链接(标清,高清,蓝光),这个URL怎么找到的{:301_1009: ...

在取得的html源码中进行json解析,里面就有playurl,这就是视频的地址,不过不同分辨率的视频地址稍有不同。
推荐
githubi 发表于 2021-12-7 19:06
baolinguo 发表于 2021-12-7 09:33
就是你打开的好看视频的网址啊。

你好,我说的意思是爬虫代码中,视频的真正下载链接(标清,高清,蓝光),这个URL怎么找到的
沙发
地狱天堂? 发表于 2021-9-16 04:03
3#
爱的天使 发表于 2021-9-16 06:12
善学善思,谢谢楼主!好用!
4#
wqw1978 发表于 2021-9-16 06:36
感谢楼主无私分享
5#
wqs9090 发表于 2021-9-16 06:54
完全看不懂,还是感谢楼主分享。
6#
shen12wang 发表于 2021-9-16 07:21
学以致用,辉者不难
7#
SuperGround 发表于 2021-9-16 07:31
额,好厉害
8#
Wapj_Wolf 发表于 2021-9-16 07:46
对于刚学习PY的小白来说,分享源码的楼主简直不要太帅。
9#
jokaka 发表于 2021-9-16 07:50
谢谢楼主的分享 学习一下知识
10#
乡间人 发表于 2021-9-16 07:51
好看视频不是可以直接下载么,
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-24 21:20

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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