nodejs抓取动态网页(配置文件技术点puppeteer官方APIpuppeteer提供一个高级API来控制Chrome或者Chromium )

优采云 发布时间: 2022-03-10 01:04

  nodejs抓取动态网页(配置文件技术点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中文网文章其他相关话题!

  

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线