我试图从 youtube 上用它的 XPath 刮取缩略图,但我得到了 src 的 undefined
。我无法弄清楚是什么导致了这种情况?我已经尝试使用 XPath 和完整 XPath 但这没有帮助。任何帮助表示赞赏。提前致谢。
const puppeteer = require('puppeteer');
async function scrapeChannel1(url) {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto(url, {
timeout: 0
});
const [el2] = await page.$x('//*[@id="dismissible"]/ytd-thumbnail');
const src1 = await el2.getProperty('src');
const thumbnailURL1 = await src1.jsonValue();
browser.close();
console.log({
thumbnailURL1
})
return {
thumbnailURL1
}
}
scrapeChannel1('https://www.youtube.com/')
答案 0 :(得分:1)
您要查找的 <img>
位于 DOM 中更深的位置:'//*[@id="dismissible"]/ytd-thumbnail/a/yt-img-shadow/img'
(因此您应该在 XPath 表达式的末尾添加:/a/yt-img-shadow/img
)。
请注意,您在 puppeteer 中拥有比 .getProperty('src')
更强大的工具来检索 DOM 元素属性。
例如page.$eval
:
const selector = 'ytd-thumbnail > a > yt-img-shadow > #img'
const imageSrc = await page.$eval(selector, el => el.src)
// returns: https://i.ytimg.com/vi/{youtube_id}/hqdefault.jpg...
或者,如果您希望所有图像都使用 page.$$eval
:
const imageSrcs = await page.$$eval(selector, elems => elems.map(el => el.src))