nodejs抓取动态网页(配置文件技术点puppeteer官方APIpuppeteer提供一个高级API来控制Chrome或者Chromium )
优采云 发布时间: 2022-03-10 01:04nodejs抓取动态网页(配置文件技术点puppeteer官方APIpuppeteer提供一个高级API来控制Chrome或者Chromium
)
本篇文章为大家带来Node如何实现头条视频批量抓取并保存(代码实现)。具有一定的参考价值。有需要的朋友可以参考一下,希望对你有帮助。
介绍
批量爬取视频或图片的一般套路是使用爬虫获取一组文件链接,然后通过writeFile等方法将文件一个一个保存。但是,头条的视频无法捕捉到需要爬取的html文件(服务器端渲染输出)中的视频链接。视频链接是在客户端渲染页面时,通过一些js文件中的算法或解密方法,根据视频的已知key或hash值,动态计算并添加到video标签中的。这也是网站的防爬措施。
当我们浏览这些页面时,我们可以通过审计元素看到计算出来的文件地址。但是,在批量下载的时候,手动一个一个的获取视频链接显然是不可取的。令人高兴的是,puppeteer 提供了模拟访问 Chrome 的能力,允许我们抓取浏览器呈现的最终页面。
项目启动命令
npm i
npm start
注意:安装puppeteer的过程有点慢,请耐心等待。
配置文件
// 配置相关
module.exports = {
originPath: 'https://www.ixigua.com', // 页面请求地址
savePath: 'D:/videoZZ' // 存放路径
}
技术点木偶师
官方 API
puppeteer 提供了一个高级 API 来控制 Chrome 或 Chromium。
傀儡师的主要作用:
使用的 API:
代码示例
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://example.com');
await page.screenshot({path: 'example.png'});
await browser.close();
})();
视频文件下载方法
const downloadVideo = async video => {
// 判断视频文件是否已经下载
if (!fs.existsSync(`${config.savePath}/${video.title}.mp4`)) {
await getVideoData(video.src, 'binary').then(fileData => {
console.log('下载视频中:', video.title)
savefileToPath(video.title, fileData).then(res =>
console.log(`${res}: ${video.title}`)
)
})
} else {
console.log(`视频文件已存在:${video.title}`)
}
}
savefileToPath (fileName, fileData) {
let fileFullName = `${config.savePath}/${fileName}.mp4`
return new Promise((resolve, reject) => {
fs.writeFile(fileFullName, fileData, 'binary', function (err) {
if (err) {
console.log('savefileToPath error:', err)
}
resolve('已下载')
})
})
}
目标网站:西瓜视频
项目功能:下载标题下的最新20个视频【微臣财经】
项目地址:Github地址
以上就是Node如何实现头条视频批量抓取和保存的详细内容(代码实现)。更多详情请关注php中文网文章其他相关话题!