本帖最后由 神一样了 于 2019-11-16 15:47 编辑
无聊写了个爬虫下载小视频
不知道为什么播放起来有点卡,效果不太理想
发出来希望大家认真学习,解决问题
用到协程增加并发,可以一起研究怎么提高下载速度
依赖requests和gevent库
pip直接安装
import requests
import re
import os
import gevent
from gevent import monkey,pool
gevent.monkey.patch_all()
url="http://www.91mmd.xyz/play?type=ckplayer&linkId=2281571"
headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36","connection":"close"}
r=requests.get(url,headers=headers)
m3u8_url=[i for i in re.findall("http.*?index\.m3u8", r.text) if "hls" not in i][0]
r=requests.get(m3u8_url,headers=headers)
video_index=re.sub("index.m3u8",r.text.split("\n")[-1],m3u8_url)
r=requests.get(video_index)
ts_list=[]
for index,ts in enumerate(re.findall('(\w*?\.ts)', r.text)):
ts_list.append((str(index).zfill(5),video_index.replace("index.m3u8", ts)))
a=len(ts_list)
def save_video(ts):
try:
global a
file_name=ts[0]
root = os.getcwd()
if not os.path.exists(root+"/"+file_name):
r = requests.get(url=ts[1], headers=headers,timeout=10)
with open(file_name+".ts", "wb")as f:
f.write(r.content)
a=a-1
print("剩余小视频",a)
except:
print(file_name+" save faild")
def rename(name="爽一下"):
path=os.getcwd()
os.system(f"copy /b *.ts new.tmp")
os.rename("new.tmp", f"{name}.mp4")
os.system('del /Q *.ts')
os.system("exit")
if __name__=="__main__":
pool = gevent.pool.Pool(30)
threads = []
for i in ts_list:
threads.append(pool.spawn(save_video,i))
gevent.joinall(threads)
name=input("重命名:")
if name:
rename(name)
else:
rename()
运行直接IDE或cmd 里python xxx.py
默认名称爽一下
按照建议用ffmpeg来合并视频,果然不卡了,还能快进,开心
改了下合并函数
def rename(name="爽一下"):
*[·-·]:基本就是遍历文件夹里的的ts写到list.txt,把list.txt里的ts合并成MP4,然后删除ts 、list.txt
os.system("(for %a in (*.ts) do @echo file '%a') > list.txt")
os.system(f"ffmpeg -f concat -safe 0 -i list.txt -c copy {name}.mp4")
os.system('del /Q *.ts')
os.system('del /Q list.txt')
os.system("exit")
欢迎大家分享些视频网站来练习
|