Puppeteer的高级用法:如何在Node.js中实现复杂的Web Scraping

2024-09-03 06:12

本文主要是介绍Puppeteer的高级用法:如何在Node.js中实现复杂的Web Scraping,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

爬虫代理.png

概述

随着互联网的发展,网页数据抓取(Web Scraping)已成为数据分析和市场调研的重要手段之一。Puppeteer作为一款强大的无头浏览器自动化工具,能够在Node.js环境中模拟用户行为,从而高效地抓取网页数据。然而,当面对复杂的网页结构和反爬虫机制时,基础的爬虫技术往往无法满足需求。本文将深入探讨如何在Node.js中利用Puppeteer的高级功能,实现复杂的Web Scraping任务,并通过代理IP、User-Agent、Cookies等技术提高爬虫的成功率。

细节
1. Puppeteer简介与安装

Puppeteer是由Google开发的一款无头浏览器工具,它可以控制Chromium或Chrome浏览器进行各种自动化操作。使用Puppeteer,开发者可以模拟浏览器的行为,例如点击、输入、导航等,甚至可以生成页面的PDF或截图。
安装Puppeteer非常简单,只需在Node.js环境中执行以下命令:

npm install puppeteer
2. 设置代理IP、User-Agent与Cookies

在进行Web Scraping时,使用代理IP可以有效避免被目标网站限制,尤其是在大量请求的情况下。此外,通过设置User-Agent和Cookies,爬虫可以伪装成真实用户的访问行为,从而进一步提高数据抓取的成功率。
以下是一个使用Puppeteer进行复杂Web Scraping的示例代码(BOSS直聘),代码中使用了亿牛云的爬虫代理,并设置了User-Agent与Cookies信息。

const puppeteer = require('puppeteer');// 配置代理IP的信息 亿牛云爬虫代理 www.16yun.cn
const proxy = {host: 'proxy.16yun.cn', // 代理IP端口服务器port: 8000, // 代理IP端口username: '你的代理用户名', // 代理IP用户名password: '你的代理密码' // 代理IP密码
};// 用户代理信息(User-Agent)
const userAgent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36';// 预设的Cookies信息
const cookies = [{name: 'your_cookie_name', // 替换为实际的Cookie名称value: 'your_cookie_value', // 替换为实际的Cookie值domain: '.zhipin.com' // Boss直聘的域名}
];(async () => {// 启动Puppeteer浏览器实例,并设置代理IPconst browser = await puppeteer.launch({headless: true, // 无头模式args: [`--proxy-server=${proxy.host}:${proxy.port}` // 配置代理IP]});// 创建一个新的浏览器页面const page = await browser.newPage();// 设置User-Agentawait page.setUserAgent(userAgent);// 设置代理IP的认证await page.authenticate({username: proxy.username,password: proxy.password});// 设置Cookiesawait page.setCookie(...cookies);// 导航到Boss直聘的应聘简历页面await page.goto('https://www.zhipin.com/web/geek/job-recommend', { waitUntil: 'networkidle2' });// 等待页面中的简历列表加载完成await page.waitForSelector('.geek-item');// 抓取简历信息const resumes = await page.evaluate(() => {const resumeElements = document.querySelectorAll('.geek-item');const resumeData = [];resumeElements.forEach((element) => {const name = element.querySelector('.name').innerText; // 应聘者姓名const jobTitle = element.querySelector('.job-name').innerText; // 目标职位const experience = element.querySelector('.text').innerText; // 工作经验const location = element.querySelector('.address').innerText; // 所在城市const salary = element.querySelector('.salary').innerText; // 期望薪资resumeData.push({ name, jobTitle, experience, location, salary });});return resumeData;});// 打印抓取的简历数据console.log(resumes);// 在抓取完成后关闭浏览器await browser.close();
})();
3. 代码解析
  • 代理IP设置:通过--proxy-server参数设置代理IP,避免IP被封禁的风险。同时,使用page.authenticate()方法对代理IP进行认证。
  • User-Agent设置:通过page.setUserAgent()方法伪装请求的浏览器信息,模拟真实用户的访问行为。
  • Cookies设置:通过page.setCookie()方法预设Cookies信息,以维持会话状态或绕过登录验证。
  • 页面抓取:通过page.goto()方法导航到目标网页,并使用page.content()方法获取网页内容。
4. 代理IP与Puppeteer的配合

使用代理IP进行Web Scraping时,建议选择一个稳定、速度快的代理服务商,例如亿牛云爬虫代理。通过使用稳定的代理服务,可以大大提高爬虫的效率和成功率。此外,合理设置抓取频率和随机等待时间,也能有效避免触发目标网站的反爬虫机制。

5. 提高爬虫效率的其他技巧
  • 使用并发请求:在不影响目标网站的前提下,可以使用Puppeteer的并发功能,批量抓取多个页面的数据,以提高抓取效率。
  • 动态加载处理:对于动态加载的网页,可以使用page.waitForSelector()page.waitForTimeout()方法,确保所有数据加载完成后再进行抓取。
  • 错误处理与重试机制:在Web Scraping过程中,难免会遇到网络异常或抓取失败的情况。通过设置错误处理与重试机制,可以提高爬虫的鲁棒性。
结论

Puppeteer作为一款功能强大的无头浏览器自动化工具,在Web Scraping领域具有广泛的应用前景。通过合理配置代理IP、User-Agent与Cookies,开发者可以有效提升爬虫的成功率,并规避目标网站的反爬虫机制。希望本文的内容能够帮助你在Node.js环境中更好地掌握Puppeteer的高级用法,并在实际项目中成功实现复杂的Web Scraping任务。

这篇关于Puppeteer的高级用法:如何在Node.js中实现复杂的Web Scraping的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1132248

相关文章

JS常用组件收集

收集了一些平时遇到的前端比较优秀的组件,方便以后开发的时候查找!!! 函数工具: Lodash 页面固定: stickUp、jQuery.Pin 轮播: unslider、swiper 开关: switch 复选框: icheck 气泡: grumble 隐藏元素: Headroom

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

让树莓派智能语音助手实现定时提醒功能

最初的时候是想直接在rasa 的chatbot上实现,因为rasa本身是带有remindschedule模块的。不过经过一番折腾后,忽然发现,chatbot上实现的定时,语音助手不一定会有响应。因为,我目前语音助手的代码设置了长时间无应答会结束对话,这样一来,chatbot定时提醒的触发就不会被语音助手获悉。那怎么让语音助手也具有定时提醒功能呢? 我最后选择的方法是用threading.Time

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

在JS中的设计模式的单例模式、策略模式、代理模式、原型模式浅讲

1. 单例模式(Singleton Pattern) 确保一个类只有一个实例,并提供一个全局访问点。 示例代码: class Singleton {constructor() {if (Singleton.instance) {return Singleton.instance;}Singleton.instance = this;this.data = [];}addData(value)

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

Java Web指的是什么

Java Web指的是使用Java技术进行Web开发的一种方式。Java在Web开发领域有着广泛的应用,主要通过Java EE(Enterprise Edition)平台来实现。  主要特点和技术包括: 1. Servlets和JSP:     Servlets 是Java编写的服务器端程序,用于处理客户端请求和生成动态网页内容。     JSP(JavaServer Pages)

Kubernetes PodSecurityPolicy:PSP能实现的5种主要安全策略

Kubernetes PodSecurityPolicy:PSP能实现的5种主要安全策略 1. 特权模式限制2. 宿主机资源隔离3. 用户和组管理4. 权限提升控制5. SELinux配置 💖The Begin💖点点关注,收藏不迷路💖 Kubernetes的PodSecurityPolicy(PSP)是一个关键的安全特性,它在Pod创建之前实施安全策略,确保P