javascript - 我将如何/在 Node 中使用什么来抓取 <video> src?

标签 javascript node.js reactjs

我专门尝试在此特定示例链接中抓取视频 src 属性:

https://clips.twitch.tv/embed?clip=HyperHandsomeWatermelonTBTacoRight&tt_medium=clips_api&tt_content=embed

我尝试过 request-promise 和 Cheerio,但不幸的是,它们不允许加载脚本,我认为这对于这个特定的示例是必要的。

我尝试过 puppeteer,它成功地获取了视频 src 链接,但 puppeteer 对于我的目的来说效率极低且缓慢(抓取多个链接)。

我一直在尝试 JSDom,因为它允许在抓取之前加载脚本,但是我无法准确找到如何将 JSDom 用于我的特定用例。任何帮助或见解将不胜感激,谢谢!

最佳答案

在这种情况下,<video>服务器的响应中不存在元素。仅当在浏览器中运行的页面上完成一些脚本编写后,它才会出现。

要解决这个问题,您需要一个 headless 浏览器,它可以加载页面、执行脚本、等待网络调用和代码呈现。你提到使用Puppeteer时遇到性能问题,幸运的是,有很多 headless 浏览器,查看this list of headless browsers

<小时/>

对于您使用 Twitch.tv 的具体情况,只需向 Twitch API 发出请求怎么样? Check out the call to the status on your video.

从那里获取源代码:

function async getSrcFromUrl(url) {

    // Figure out how to parse the clip name (HyperHandsomeWatermelonTBTacoRight)
    const clip = getClipNameFromURL(url); 

    // Then fetch
    const status = JSON.parse(await request(`https://clips.twitch.tv/api/v2/clips/${clip}/status`));
    return status.quality_options[0].source;
}

const src = await getSrcFromUrl("https://clips.twitch.tv/embed?clip=HyperHandsomeWatermelonTBTacoRight&tt_medium=clips_api&tt_content=embed");

关于javascript - 我将如何/在 Node 中使用什么来抓取 <video> src?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53020095/

相关文章:

javascript - 父容器调整大小时自动调整 dojo dijit.Grid 小部件的大小

node.js - 在ApolloServer中支持异议 `$formatJson`

css - React 中代码顶部的内部 CSS 样式

css - 无法更改 MUI 表填充

javascript - 从数组javascript重建图像

javascript - 在更改输入文本时在文本区域中插入数据

javascript - 在 Xampp Web 服务器上设置 AngularJS 和 NodeJS

javascript - 无法组合Reducers()

javascript - 使 Wordpress 主题下划线下拉菜单在单击外部时关闭

node.js - CommonJS 是同步的,但如果调用异步函数会发生什么