【问题标题】:How/what would I use in Node to scrape a <video> src?我将如何/在 Node 中使用什么来抓取 <video> src?
【发布时间】:2018-10-27 19:08:06
【问题描述】:

我特别想在这个特定的示例链接中抓取视频 src 道具:

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

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

我尝试过 puppeteer,它成功地抓取了视频 src 链接,但 puppeteer 效率极低且速度慢,就我的目的而言(抓取多个链接)。

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

【问题讨论】:

  • 我认为这个问题与reactjs无关

标签: javascript node.js reactjs


【解决方案1】:

在这种情况下,&lt;video&gt; 元素不会出现在来自服务器的响应中。它仅在页面上完成一些脚本后才会出现,该页面在浏览器中运行。

要解决这个问题,你需要一个无头浏览器,它可以加载页面、执行脚本、等待网络调用和代码呈现。您提到使用 Puppeteer 时遇到性能问题,幸运的是,有很多无头浏览器,请查看 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");

【讨论】:

  • 你可能刚刚救了我的命。我在 Twitch 与他们的 API 的首席开发人员交谈,询问这个特定的问题,但从未得到这个答案。非常感谢。
  • 乐于助人:)
猜你喜欢
  • 2016-01-28
  • 2022-09-28
  • 2021-08-17
  • 2020-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-27
  • 1970-01-01
相关资源
最近更新 更多