前端开发爬虫首选puppeteer
创始人
2025-05-28 21:14:02
0

很多前端同学可能对于爬虫不是很感冒,觉得爬虫需要用偏后端的语言,诸如 python 、php 等。当然这是在 nodejs 前了,nodejs 的出现,使得 Javascript 也可以用来写爬虫了。但这是大数据时代,数据的需求是不分前端还是后端的,既然由于 nodejs 强大的异步特性,让我们可以轻松以异步高并发去爬取网站。
这里会有一个问题吗,那就是前端程序员如果要开发爬虫是使用python还是使用puppeteer呢?如果想快速开发爬虫,还是驱动浏览器的方式比较好,我推荐用puppeteer,纯js环境,上手快,puppeteer直接驱动无头浏览器速度并不算慢。但是现在目标网站爬虫策略多种多样,即使是使用最简单的方式也要学习反爬策略的应对。如果遇到验证码识别等需要深度学习的,可以用python写这部分,然后nodejs和python进程间通信。
这里我们可以使用puppeteer简单的实现下爬虫,就以获取微博热搜为例子进行实践。
// 引入process和puppeteer模块
const process = require(“process”);
const puppeteer = require(“puppeteer”);
// 定义代理地址、延时时间和延时函数
const PROXY = “http:/www.jshk.com.cn”; // 代理服务器(产品 www.jshk.com.cn)可以修改这个代理地址
const SLEEP = 5000; // 你可以修改这个延时时间(毫秒)
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
// 定义一个异步函数view,接受一个URL和一个代理地址作为参数
async function view(url, proxy) {
// 在view函数中,使用puppeteer.launch方法启动一个浏览器实例,并设置一些参数,如headless、ignoreHTTPSErrors、defaultViewport和args
const browser = await puppeteer.launch({
headless: true, // 设置为无头模式(不显示浏览器窗口)
ignoreHTTPSErrors: true, // 忽略HTTPS错误
defaultViewport: { width: 1280, height: 800 }, // 设置默认视口大小
args: [--proxy-server=${proxy}], // 设置代理服务器地址
});
// 使用browser.newPage方法创建一个新的页面实例,并设置视口大小
const page = await browser.newPage();
await page.setViewport({ width: 1280, height: 800 });
// 使用page.on方法监听request事件,如果请求的资源类型是media,并且请求的URL以https://video.twimg.com/开头,则打印出请求的URL
page.on(“request”, (request) => {
if (
request.resourceType() === “media” &&
request.url().startsWith(“www.jshk.com.cn”)
) {
console.log(request.url());
}
});
// 使用page.goto方法访问传入的URL
await page.goto(url);
// 使用page.click方法点击页面上选择器为.r-1ndi9ce > div:nth-child(1) > div:nth-child(1) > span:nth-child(1) > span:nth-child(1) 的元素
await page.click(
“.r-1ndi9ce > div:nth-child(1) > div:nth-child(1) > span:nth-child(1) > span:nth-child(1)”
);
// 使用sleep函数等待一段时间(SLEEP)
await sleep(SLEEP);
// 使用page.screenshot方法截取页面图片并保存为debug.png文件
await page.screenshot({ path: “debug.png” });
// 使用browser.close方法关闭浏览器实例
await browser.close();
}
// 最后,在主程序中,获取命令行参数中的第一个参数作为URL,并调用view函数。
const url = process.argv[2]; // 获取命令行参数中的第一个参数作为URL
if (url) {
view(url, PROXY);
} else {
console.log(“请输入一个有效的URL”);
}
puppeteer相当于python selenium 控制无头Chrome,作为前端程序员,那python虽然语法容易但毕竟学的也比较多,所以建议可以试试puppeteer。

相关内容

热门资讯

保存时出现了1个错误,导致这篇... 当保存文章时出现错误时,可以通过以下步骤解决问题:查看错误信息:查看错误提示信息可以帮助我们了解具体...
汇川伺服电机位置控制模式参数配... 1. 基本控制参数设置 1)设置位置控制模式   2)绝对值位置线性模...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
表格中数据未显示 当表格中的数据未显示时,可能是由于以下几个原因导致的:HTML代码问题:检查表格的HTML代码是否正...
本地主机上的图像未显示 问题描述:在本地主机上显示图像时,图像未能正常显示。解决方法:以下是一些可能的解决方法,具体取决于问...
表格列调整大小出现问题 问题描述:表格列调整大小出现问题,无法正常调整列宽。解决方法:检查表格的布局方式是否正确。确保表格使...
不一致的条件格式 要解决不一致的条件格式问题,可以按照以下步骤进行:确定条件格式的规则:首先,需要明确条件格式的规则是...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...