好看视频是百度旗下的短视频平台,里面有海量好看的短视频,遇到我们喜欢的,要如何下载呢。下面直接给出python语言中地址的解析及各种不同格式视频的下载。
#encoding:utf-8
# 好看视频下载
im
port socket
from urllib.request im
port urlopen
im
port urllib
im
port re
im
port time
from pyquery im
port PyQuery as pq
im
port requests
from tqdm im
port tqdm # 打印进度条的库
im
port gzip
print('程序开始运行。。。')
requests.adapters.DEFAULT_RETRIES = 5
# co
nnect 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 l
inks
# 取得视频名称(标题)
videotitle = re.findall('<h1 class="videoinfo-title">(.*?)</h1>',html)
print(videotitle)
# 默认地址
l
inks = re.findall('"playurl":"(.*)","clarityUrl"',html)#默认地址
downurl = l
inks
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_co
ntent(1024*1024), total=total_size, unit='KB'):
f.write(chunk)
print('下载完成。')
sdl
inks = re.findall('"key":"sd","rank":0,"title":"(.*?)","videoBps":',html)#标清地址
sdl
inks = re.findall('"url":"(.*)',sdl
inks)
sdurl = sdl
inks
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_co
ntent(1024*1024), total=total_size, unit='KB'):
f.write(chunk)
print('下载完成。')
hdl
inks = re.findall('"key":"hd","rank":1,"title":"(.*?)","videoBps":',html)#高清地址
hdl
inks = re.findall('"url":"(.*)',hdl
inks)
hdurl = hdl
inks
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_co
ntent(1024*1024), total=total_size, unit='KB'):
f.write(chunk)
print('下载完成。')
scl
inks = re.findall('"key":"sc","rank":2,"title":"(.*?)","videoBps":',html)#超清地址
scl
inks = re.findall('"url":"(.*)',scl
inks)
scurl = scl
inks
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_co
ntent(1024*1024), total=total_size, unit='KB'):
f.write(chunk)
print('下载完成。')
p1080l
inks = re.findall('"key":"1080p","rank":3,"title":"(.*?)","videoBps":',html)#蓝光地址
p1080l
inks = re.findall('"url":"(.*)',p1080l
inks)
p1080url = p1080l
inks
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_co
ntent(1024*1024), total=total_size, unit='KB'):
f.write(chunk)
print('下载完成。')
print('所有格式视频下载完成,请检查是否正确。')
当然了,这里使用的是最笨的方法,代码可以进行优化,如你有兴趣,自己去处理吧。
githubi 发表于 2021-12-7 19:06
你好,我说的意思是爬虫代码中,视频的真正下载链接(标清,高清,蓝光),这个URL怎么找到的{:301_1009: ...
在取得的html源码中进行json解析,里面就有playurl,这就是视频的地址,不过不同分辨率的视频地址稍有不同。
baolinguo 发表于 2021-12-7 09:33
就是你打开的好看视频的网址啊。
你好,我说的意思是爬虫代码中,视频的真正下载链接(标清,高清,蓝光),这个URL怎么找到的{:301_1009:}
下载点素材,谢谢
善学善思,谢谢楼主!好用!
感谢楼主无私分享
完全看不懂,还是感谢楼主分享。
学以致用,辉者不难
额,好厉害
对于刚学习PY的小白来说,分享源码的楼主简直不要太帅。
谢谢楼主的分享 学习一下知识
好看视频不是可以直接下载么,