javascript - 我将如何/在 Node 中使用什么来抓取
问题描述
我特别想在这个特定的示例链接中抓取视频 src 道具:
我已经尝试过 request-promise 和cheerio,但不幸的是它们不允许加载脚本,我认为这是这个特定示例所必需的。
我已经尝试过 puppeteer,它成功地抓取了视频 src 链接,但是 puppeteer 对于我的目的而言效率极低且速度很慢(抓取多个链接)。
我一直在尝试 JSDom,因为它允许在抓取之前加载脚本,但是我无法准确找到如何将 JSDom 用于我的特定用例。任何帮助或见解将不胜感激,谢谢!
解决方案
在这种情况下,<video>
服务器的响应中不存在该元素。它仅在页面上完成一些脚本后才会出现,该页面在浏览器中运行。
要解决这个问题,你需要一个无头浏览器,它可以加载页面、执行脚本、等待网络调用和代码渲染。您提到使用 Puppeteer 时遇到性能问题,幸运的是,有很多无头浏览器,请查看此无头浏览器列表。
至于您使用 Twitch.tv 的具体情况,不如直接向 Twitch API 发出请求?查看对视频状态的调用。
从那里获取源代码:
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");