我正在尝试抓取动漫视频页面[jkanime],但由于mp4视频格式位于iframe #document中,因此我遇到了问题。
我尝试使用cheerio制作querie,但是我只设法从facebook插件中获得了两个src。好像我不知道mp4所在的ifram。
在chrome开发工具中,我输入了以下内容: $('#jkvideo_html5_api源')
mp4的src向我显示。但是,当我对cheerio使用相同的查询时,什么也没发生。
我已经尝试了数周以尝试获取mp4,但我做不到。任何帮助都将非常受欢迎。
图片
const getAnimeVideo = async (id: string, chapter: number) => {
const res = await fetch(`${url}${id}/${chapter}/`);
const body = await res.text();
const $ = cheerio.load(body);
const arr = [];
$('iframe').each((index, element) => {
const $element = $(element);
const x = $element.attr('src');
console.log(x);
arr.push(x);
});
return arr;
}
获得输出
{
"videos": [
"https://www.facebook.com/plugins/like.php?href=https%3A%2F%2Fwww.facebook.com%2Fjkanimetv%2F&width=132&layout=box_count&action=like&size=large&show_faces=false&share=false&height=21&appId=149291901844100",
"https://www.facebook.com/plugins/like.php?href=https://jkanime.net/tokyo-ghoul/1/&width=76&layout=box_count&action=like&size=small&show_faces=false&share=false&height=65&appId=149291901844100"
]
}
我想要获得的输出
{
"videos": [
"https://storage.googleapis.com/markesito.appspot.com/blakkkk-88.mp4"
]
}
更新:晚上10:52
使用操纵up,我找到了使用“ player_conte”类访问iframe的方法。它在终端显示以下输出:
现在..我不知道如何从_navigationURL获取链接
要能够在cheerio上使用它并参考视频的来源。
代码已更新
const getAnimeVideo = async (id: string, chapter: number) => {
const BASE_URL = `${url}${id}/${chapter}/` // => https://jkanime.net/tokyo-ghoul/1/
const browser = await puppeteer.launch()
const page = await browser.newPage()
await page.goto(BASE_URL);
const elementHandle = await page.$('.player_conte')
const frame = await elementHandle.contentFrame();
const $ = cheerio.load(`${frame}`);
console.log(frame)
}
答案 0 :(得分:0)
使用木偶戏解决的问题
const getAnimeVideo = async (id: string, chapter: number) => {
const BASE_URL = `${url}${id}/${chapter}/` // => https://jkanime.net/tokyo-ghoul/1/
const browser = await puppeteer.launch()
const page = await browser.newPage()
await page.goto(BASE_URL);
const elementHandle = await page.$('.player_conte')
const frame = await elementHandle.contentFrame();
const video = await frame.$eval('#jkvideo_html5_api', el =>
Array.from(el.getElementsByTagName('source')).map(e => e.getAttribute("src")));
return video;
}