百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

Node.js+Puppeteer:新一代动态爬虫利器,高效抓取不再难!

ccwgpt 2025-06-12 11:16 2 浏览 0 评论

在数据为王的时代,爬虫技术已成为开发者必备技能。虽然Python的Scrapy、BeautifulSoup等工具占据主流视野,但Node.js凭借其异步特性与Puppeteer的无头浏览器能力,正在悄然掀起动态爬虫的新革命!今天,我们揭秘如何用Node.js+Puppeteer高效攻破复杂网站,轻松获取动态数据!


为什么选择Node.js+Puppeteer?

  1. 无头浏览器王者
    Puppeteer由谷歌官方维护,直接操控Chromium浏览器,完美模拟用户操作(点击、滚动、表单提交),轻松破解JavaScript动态渲染页面,传统爬虫难以企及!
  2. 异步性能杀手锏
    Node.js事件驱动架构天生适合高并发I/O操作,结合async/await语法,实现毫秒级多页面并行抓取,效率提升10倍+!
  3. 一站式解决方案
    截图、PDF生成、自动化测试一把抓,爬取数据的同时还能完成UI监控,一箭双雕!

实战:5分钟爬取电商价格数据

场景需求
抓取某电商平台搜索“智能手机”的结果,提取商品名称、价格、评分。

代码实现

const puppeteer = require('puppeteer');

(async () => {
  // 启动浏览器,设置视口和代理
  const browser = await puppeteer.launch({ 
    headless: 'new', // 新版本无头模式
    args: ['--no-sandbox', '--proxy-server=ip:port'] 
  });
  const page = await browser.newPage();
  await page.setViewport({ width: 1280, height: 800 });

  // 设置UA和绕过检测
  await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36');
  await page.evaluateOnNewDocument(() => {
    Object.defineProperty(navigator, 'webdriver', { get: () => false });
  });

  // 导航到目标页面
  await page.goto('https://example.com/search?q=智能手机', {
    waitUntil: 'networkidle2',
    timeout: 60000
  });

  // 滚动加载全部内容(针对懒加载页面)
  await autoScroll(page);

  // 提取数据
  const products = await page.$eval('.product-item', items => 
    items.map(item => ({
      title: item.querySelector('.title').innerText.trim(),
      price: item.querySelector('.price').innerText.replace('yen', ''),
      rating: item.querySelector('.rating').getAttribute('data-score')
    }))
  );

  console.log(products);
  await browser.close();
})();

// 自动滚动函数
async function autoScroll(page) {
  await page.evaluate(async () => {
    await new Promise((resolve) => {
      let totalHeight = 0;
      const distance = 100;
      const timer = setInterval(() => {
        const scrollHeight = document.body.scrollHeight;
        window.scrollBy(0, distance);
        totalHeight += distance;
        if (totalHeight >= scrollHeight) {
          clearInterval(timer);
          resolve();
        }
      }, 100);
    });
  });
}

进阶技巧:突破反爬防线

  1. 指纹伪装
  • 使用puppeteer-extra-plugin-stealth插件消除Headless特征
  • 随机化硬件指纹(屏幕分辨率、时区、字体列表)
  1. 智能等待策略
// 元素级精准等待
await page.waitForSelector('.price', { visible: true, timeout: 5000 });

// 网络请求拦截(捕获AJAX数据)
page.on('response', async response => {
  if (response.url().includes('/api/data')) {
    const data = await response.json();
    console.log(data.items);
  }
});

3.分布式架构

  • 结合bull队列实现任务调度
  • 使用puppeteer-cluster管理多实例浏览器池

性能优化指南

资源拦截 – 屏蔽图片/CSS减少带宽消耗

await page.setRequestInterception(true);
page.on('request', req => {
  if (['image', 'stylesheet'].includes(req.resourceType())) {
    req.abort();
  } else {
    req.continue();
  }
});

内存管控 – 定时清理页面实例

// 每处理50个页面重启一次浏览器
let pageCount = 0;
if (++pageCount % 50 === 0) {
  await browser.close();
  browser = await puppeteer.launch();
}

立即行动!

npm install puppeteer

项目开源地址:

https://gitee.com/mirrors/puppeteer-nodejs

中文文档推荐:

https://puppeteer.bootcss.com/

相关推荐

火电厂智能管控新基建:全场景人员定位系统架构解析

在能源生产领域,火电厂以庞大的厂区规模、复杂的作业环境和密集的人机交互著称。从高温高压的锅炉房到精密复杂的电气设备间,从露天煤场到灰渣处理区,传统管理模式下的人员定位盲区,正成为制约安全生产与高效运营...

安全仪表系统(SIS)全生命周期管理:从设计到运维的深度解析

以下是一篇关于安全仪表系统(SIS)的技术解析与实践方法,涵盖系统架构、设计标准、实施流程及行业应用。安全仪表系统(SIS)是工业过程安全的最后一道防线,通过独立于基础控制系统的硬件和逻辑,在工艺失控...

数字化转型架构下的数据安全治理方案

这份PPT文件内容围绕数字化转型架构下的数据安全治理方案展开,主要探讨了数据质量治理、安全治理、全生命周期治理以及治理考核等方面的内容。更多参考及文档获取详见公众号:优享智库数据治理概述定义与目标:数...

安全完整性等级(SIL)分析报告编制与认证实践方法

以下是一篇关于安全完整性等级(SIL)分析报告的文章,涵盖SIL定级方法、验证流程、计算模型及工程实践。安全完整性等级(SIL)是量化安全仪表系统(SIS)性能的核心指标,由IEC61508/615...

项目管理体系框架(项目的管理体系)

Pokemon go下载教程 口袋妖怪Go下载解锁方法

#p#安卓下载#e#Pokemongo怎么下载?口袋妖怪go下载教程讲解。虽然锁区了但是大家还是有办法的,首先是口袋妖怪Go下载问题,很多口袋妖怪go的安卓玩家不知道怎么下载游戏,小编给大家详细解答...

抛弃Windows吧!谷歌推免费Chrome系统,一个U盘就搞定

在目前的个人电脑上,最主流的系统当然是Windows,不过除了Windows之外,我们也可以选择购买苹果的电脑,使用苹果的MacOS系统。不过除了苹果和微软的系统之外,实际上谷歌也有自己用于个人电脑...

谷歌误发ARM版Chrome安装包,致英特尔 /AMD用户无法安装

IT之家3月26日消息,科技媒体WindowsLatest昨日(3月25日)发布博文,报道称由于谷歌误发适用于ARM架构的安装包,导致用户从谷歌官网下载的ChromeSetu...

【Google Gemini极简教程】使用Flask和Gemini API构建一个AI BaaS

BaaS(BackendasaService,后端即服务)BaaS是一种云服务模型,它为开发者提供了一种便捷的方式来构建和管理应用程序的后端服务。BaaS提供了一系列的后端功能,如数据库管理...

第一资讯Windows 10 Mobile已成功安装谷歌Play Store

虽然微软并未正式推出WP可安装APK的功能,但近期有不少玩机爱好者已经在Windows10Mobile平台上用上了Android应用,而且随后还在需要谷歌服务框架(GoogleServices)...

宝可梦TCG Pocket谷歌账号登录,给你提供指南

《宝可梦TCGPocket》作为一款备受欢迎的卡牌对战游戏,为了给玩家提供更加便捷和安全的登录方式,支持使用谷歌账号进行登录。通过谷歌账号登录,您不仅可以快速进入游戏,还能享受账号数据同步、跨设备游...

秒变万能家庭服务器!斐讯N1 armbian安装指南

一直以来,我都想配置一台小型服务器放在家里玩一玩,但是x86架构的主机体积大功耗高,价格也不低。而树莓派的话,价格便宜一点,性能对于轻度使用也基本够用。可是树莓派仍然要两三百块钱,感觉还是有点贵。于是...

如何自己开发一个Google浏览器插件?

相信很多人都好奇,谷歌浏览器那么多的插件是如何开发的,我们如何开发一个自定义的Google浏览器插件,下面我们就来详细的给出一个开发Google浏览器插件的流程。准备环境首先需要有一个文本编辑器工具如...

我的世界手机版谷歌商店安装教程(我的世界谷歌下载)

在我的世界手机版升级到0.11.0版本后,很多玩家发现正式版需要有谷歌商店的验证也就是必须安装Googleplay才能玩。这次搞趣网小编就为大家带来我的世界手机版谷歌商店安装教程。有些手机自带Goo...

部落冲突安卓版谷歌怎么绑定 有无root都可以

部落冲突安卓版谷歌怎么绑定?下面小编为大家带来部落冲突安卓版谷歌绑定攻略详解,希望这篇攻略详解能够对大家有所帮助。首先准备这些东西(必须在网上自己下载,不要相信google应用)还需要下载"谷歌服务框...

取消回复欢迎 发表评论: