我正在尝试从网站下载视频,但我无法下载视频。我无法下载视频。我没有看到任何错误,但也没有看到下载的视频。我不确定我的代码有什么问题。非常感谢任何帮助。提前谢谢你。
下面的代码:
try:
import urllib.request as urllib2
except ImportError:
import urllib2
dwn_link = 'https://www1.wdr.de/fernsehen/lokalzeit/ostwestfalen/videos/video-lokalzeit-owl---1304.html'
file_name = '_video.mp4'
rsp = urllib2.urlopen(dwn_link)
with open(file_name,'wb') as f:
f.write(rsp.read())
结果中有一个Javascript对象保存mp4和m3u8链接,其格式如下:
<script type="text/javascript">
globalObject.gseaInlineMediaData["something"] =
{
"mediaVersion": "1.4.0",
"mediaType": "vod",
"mediaResource": {
"dflt": {
"videoURL": "//some_file.m3u8",
"mediaFormat": "hls"
},
"alt": {
"videoURL": "//some_file.mp4", <======== HERE
"mediaFormat": "mp4"
},
"previewImage": "//some_file.jpg"
},
....
};
</script>
你可以像这样直接抓取mp4文件:
import requests
import re
import json
r = requests.get("https://www1.wdr.de/fernsehen/lokalzeit/ostwestfalen/videos/video-pausenbrot-prozess-mit-gutachten-zum-angeklagten-100.html")
res = re.search(r"globalObject.gseaInlineMediaData.*s*=s*(.*)s*;s*</script>", r.text, re.DOTALL)
data = json.loads(res.group(1))
video_url = f'https:{data["mediaResource"]["alt"]["videoURL"]}'
print(video_url)
r = requests.get(video_url, stream = True)
with open("video.mp4", 'wb') as f:
for chunk in r.iter_content(chunk_size = 1024*1024):
if chunk:
f.write(chunk)
如果您有一个视频链接,其中alt
对象中不可用mp4,您可以使用ffmpeg从m3u8获取文件:
ffmpeg -protocol_whitelist "file,http,https,tcp,tls" -i something.m3u8 file.mp4