我专门尝试在此特定示例链接中抓取视频 src 属性:
我尝试过 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/