西瓜视频爬取【丐版】

2023-11-23 09:30
文章标签 视频 爬取 西瓜 丐版

本文主要是介绍西瓜视频爬取【丐版】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

起因:

        学校每月免费流量120G,然而月底最后一天了才用了70G,于是就琢磨着怎么把剩下的50G花光。然后想起之前一个视频博主的影视解析很不错,于是萌生了把这个博主的所有视频爬取下来的想法,在这里把爬取方案做个记录和分享。

题外话:之所以选择西瓜视频而不是其他的视频平台,是该博主对《楚门的世界》的电影解析只在西瓜视频上没有被删减,前文所述个人认为很不错的影视解析是《Silo》的,推荐大家可以去看看这部剧,真的还蛮不错的。

方案:

  1. 访问博主主页
  2. 获取其所有视频的链接
  3. 获取其各个视频的真实地址
  4. 下载视频

具体实现流程:

  • 访问博主主页

        这一步没啥好讲的,找到你想爬取的视频博主的个人主页,界面大致如下:

  • 获取其所有视频的链接

        这里的链接指的是视频的短链接,也就是平时分享视频的链接地址,格式就像这样:

        https://www.ixigua.com/7266702277002723879

        那么怎么在个人主页获取其所有视频的短链接呢? 我这里的方案是在检查页面元素后发现短链接的地址存在于class="HorizontalFeedCard__title color-link-content-primary" 的<a>元素中

        具体实现我是在浏览器的控制台上用JavaScript代码实现的,同时我也获取了<a>元素的textContent用于下载视频的命名:

function getAllAHrefAndText(selector) {// 查找所有符合选择器条件的<a>元素var elements = document.querySelectorAll(selector);// 创建空数组来存储href属性内容和文本内容var hrefArray = [];var textArray = [];// 遍历并将每个元素的href属性值和文本内容添加到数组中for (var i = 0; i < elements.length; i++) {var element = elements[i];var href = element.getAttribute('href');// 将href属性前面拼接字符串"https://www.ixigua.com"if (href) {var fullHref = "https://www.ixigua.com" + href;hrefArray.push(fullHref);}textArray.push(element.textContent);}// 返回包含href属性内容和文本内容的对象return {href: hrefArray,text: textArray};}// 调用函数并传入选择器作为参数var result = getAllAHrefAndText('a.HorizontalFeedCard__title.color-link-content-primary');// 打印结果console.log("链接内容:", result.href);console.log("文本内容:", result.text);

        得到的结果如下图:

        刚好JavaScript的Array和python的List格式是一样的,复制之后贴到python里就行:

  • 获取其各个视频的真实地址  

        由于西瓜视频使用了音视频分离,所以需要在短链接的界面打开控制台输入下面的JavaScript命令分别获取各个视频的真实视频及音频地址:

// 视频地址window.atob(window._SSR_HYDRATED_DATA.anyVideo.gidInformation.packerData.video.videoResource.dash_120fps.dynamic_video.dynamic_video_list.pop().main_url); //
// 音频地址window.atob(window._SSR_HYDRATED_DATA.anyVideo.gidInformation.packerData.video.videoResource.dash_120fps.dynamic_video.dynamic_audio_list.pop().main_url);

        这段JavaScript代码简单解释一下就是获取main_url的字符串数据(base64 编码)并将其解码为原始数据。

        那么接下来就是如何用python模拟在浏览器访问视频地址,并打开控制台执行上述两条命令以获取音视频的真实地址了,我使用了python的selenium库,具体代码如下:

def spider(url):
# 创建一个Chrome浏览器实例,并使其防止被检测“Chrome正受到自动测试软件的控制”options = webdriver.ChromeOptions()options.add_experimental_option('excludeSwitches', ['enable-automation'])options.add_experimental_option('useAutomationExtension', False)driver = webdriver.Chrome(options=options)driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {"source": """Object.defineProperty(navigator, 'webdriver', {get: () => undefined})"""})# 打开网页driver.get(url)# 待优化部分,理论上可以有更好的等待机制,我这里偷懒直接等待10stime.sleep(10)# 执行JavaScript代码并获取视频URLjs_code_video = 'return window.atob(window._SSR_HYDRATED_DATA.anyVideo.gidInformation.packerData.video.videoResource.dash_120fps.dynamic_video.dynamic_video_list.pop().main_url);'video_url = driver.execute_script(js_code_video)js_code_audio = 'return window.atob(window._SSR_HYDRATED_DATA.anyVideo.gidInformation.packerData.video.videoResource.dash_120fps.dynamic_video.dynamic_audio_list.pop().main_url);'audio_url = driver.execute_script(js_code_audio)# 打印视频URL
#     print(video_url)
#     print(audio_url)# 关闭浏览器driver.quit()return str(video_url), str(audio_url)
  • 下载视频

        这里其实应该有很多种实现,毕竟音视频地址都拿到了,这里分享一下我的方案,我采用的是FFmpeg,原理如下:

ffmpeg -i video.mp4 -i audio.mp3 -c:v copy -c:a aac -strict experimental output.mp4

        只需将video.mp4的部分换成视频地址,audio.mp3的地方换成音频地址,output.mp4换成你想保存的路径就行。

        有关FFmpeg的下载和基本使用可以看我之前的博客,有相关的分享。

        这里的具体实现用python的os库执行控制台命令,具体代码如下:

for i in range(len(urls)):video_url, audio_url = spider(urls[i])print("url: ", i, " has gotten.")# 这里写的很丑陋,应该有更好的写法,但我这里也能用就没多管cmd = 'ffmpeg -i "' + video_url + '" -i "' + audio_url + '" -c:v copy -c:a aac -strict experimental ' + 'E:/' + titles[i] + '.mp4'
#     print(cmd)os.system(cmd)
print("done.")

结果:

        成功爬取!

这篇关于西瓜视频爬取【丐版】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/416974

相关文章

流媒体平台/视频监控/安防视频汇聚EasyCVR播放暂停后视频画面黑屏是什么原因?

视频智能分析/视频监控/安防监控综合管理系统EasyCVR视频汇聚融合平台,是TSINGSEE青犀视频垂直深耕音视频流媒体技术、AI智能技术领域的杰出成果。该平台以其强大的视频处理、汇聚与融合能力,在构建全栈视频监控系统中展现出了独特的优势。视频监控管理系统EasyCVR平台内置了强大的视频解码、转码、压缩等技术,能够处理多种视频流格式,并以多种格式(RTMP、RTSP、HTTP-FLV、WebS

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

《x86汇编语言:从实模式到保护模式》视频来了

《x86汇编语言:从实模式到保护模式》视频来了 很多朋友留言,说我的专栏《x86汇编语言:从实模式到保护模式》写得很详细,还有的朋友希望我能写得更细,最好是覆盖全书的所有章节。 毕竟我不是作者,只有作者的解读才是最权威的。 当初我学习这本书的时候,只能靠自己摸索,网上搜不到什么好资源。 如果你正在学这本书或者汇编语言,那你有福气了。 本书作者李忠老师,以此书为蓝本,录制了全套视频。 试

SAM2POINT:以zero-shot且快速的方式将任何 3D 视频分割为视频

摘要 我们介绍 SAM2POINT,这是一种采用 Segment Anything Model 2 (SAM 2) 进行零样本和快速 3D 分割的初步探索。 SAM2POINT 将任何 3D 数据解释为一系列多向视频,并利用 SAM 2 进行 3D 空间分割,无需进一步训练或 2D-3D 投影。 我们的框架支持各种提示类型,包括 3D 点、框和掩模,并且可以泛化到不同的场景,例如 3D 对象、室

树莓派5_opencv笔记27:Opencv录制视频(无声音)

今日继续学习树莓派5 8G:(Raspberry Pi,简称RPi或RasPi)  本人所用树莓派5 装载的系统与版本如下:  版本可用命令 (lsb_release -a) 查询: Opencv 与 python 版本如下: 今天就水一篇文章,用树莓派摄像头,Opencv录制一段视频保存在指定目录... 文章提供测试代码讲解,整体代码贴出、测试效果图 目录 阶段一:录制一段

基于树梅派的视频监控机器人Verybot

最近这段时间做了一个基于树梅派 ( raspberry pi ) 的视频监控机器人平台 Verybot ,现在打算把这个机器人的一些图片、视频、设计思路进行公开,并且希望跟大家一起研究相关的各种问题,下面是两张机器人的照片:         图片1:                   图片2                    这个平台的基本组成是:

PC与android平板通过浏览器监控Verybot的视频

下面这个视频是PC与android平板通过浏览器监控Verybot的视频:           http://v.youku.com/v_show/id_XNjYzNzYyMTIw.html

Verybot的几个视频

1、Verybot的运动控制                 http://v.youku.com/v_show/id_XNjYxNjg4MTM2.html           2、Verybot比较初步的网络视频监控           http://v.youku.com/v_show/id_XNjYxNjkyMjg0.html           3、V

java计算机毕设课设—停车管理信息系统(附源码、文章、相关截图、部署视频)

这是什么系统? 资源获取方式在最下方 java计算机毕设课设—停车管理信息系统(附源码、文章、相关截图、部署视频) 停车管理信息系统是为了提升停车场的运营效率和管理水平而设计的综合性平台。系统涵盖用户信息管理、车位管理、收费管理、违规车辆处理等多个功能模块,旨在实现对停车场资源的高效配置和实时监控。此外,系统还提供了资讯管理和统计查询功能,帮助管理者及时发布信息并进行数据分析,为停车场的科学

一款支持同一个屏幕界面同时播放多个视频的视频播放软件

GridPlayer 是一款基于 VLC 的免费开源跨平台多视频同步播放工具,支持在一块屏幕上同时播放多个视频。其主要功能包括: 多视频播放:用户可以在一个窗口中同时播放任意数量的视频,数量仅受硬件性能限制。支持多种格式和流媒体:GridPlayer 支持所有由 VLC 支持的视频格式以及流媒体 URL(如 m3u8 链接)。自定义网格布局:用户可以配置播放器的网格布局,以适应不同的观看需求。硬