Node Unblocker 网页抓取完整指南

Post Time: May 29, 2025

网页抓取是从网站提取数据的关键技术,但许多网站都采用了反抓取机制,例如 IP 地址封锁、验证码、速率限制和地理限制。为了突破这些障碍,抓取工具通常依赖于代理、无头浏览器(例如 Puppeteer)以及代理服务器(例如 Node Unblocker)。

本指南将介绍:

什么是 Node Unblocker 以及它的工作原理 如何设置 Node Unblocker 进行网页抓取 如何将 Puppeteer 与代理集成以绕过限制 如何轮换代理以避免被封禁 在云服务上部署 Node Unblocker 进行大规模抓取

1. 什么是 Node Unblocker?

node unblocker Node Unblocker 是一款基于 Node.js 的 Web 代理,它通过中间服务器路由流量,允许用户访问被屏蔽的内容。与传统代理不同,它通过修改 Web 请求来绕过限制。

相关文章Node Unblocker

Node Unblocker 的主要功能

  • 绕过基于 IP 的阻止 – 帮助在抓取受保护的网站时避免被封禁
  • 处理包含大量 JavaScript 的页面 – 与 Puppeteer 和无头浏览器兼容
  • 充当代理服务器 – 可在本地或远程服务器上使用
  • 支持动态修改 – 允许操作请求以避免检测

为什么使用 Node Unblocker 进行 Web 抓取?

在抓取网站时,尤其是那些有反爬虫保护的网站,使用简单的基于 IP 的代理 (HTTP/SOCKS5) 可能不够。网站通常会拦截来自已知数据中心 IP 的流量。Node Unblocker 充当中间层,伪装请求,使其看起来更像人类。

2. 设置 Node Unblocker 进行网页抓取

步骤 1:安装 Node.js 及依赖项

确保您的计算机上已安装 Node.js。运行以下命令进行检查:

sh Copy
1复制
2编辑
3node -v
4npm -v
5
6

如果尚未安装,请从此处下载并安装 Node.js。

现在,安装 Node Unblocker:

sh Copy
1复制
2编辑
3npm install unblocker --save
4
5

或者,全局安装:

sh Copy
1复制
2编辑
3npm install -g unblocker
4
5

步骤 2:使用 Node Unblocker 创建代理服务器

创建一个名为 server.js 的新文件并添加以下代码:

javascript Copy
1复制
2编辑
3const Unblocker = require('unblocker');
4const express = require('express');
5
6const app = express();
7const unblocker = new Unblocker({
8prefix: '/proxy/',
9requestMiddleware: [
10function (req, res, next) {
11console.log(`Proxying: ${req.url}`);
12next();
13},
14],
15});
16
17app.use(unblocker);
18app.listen(8080, () => {
19console.log('Node Unblocker 正在 http://localhost:8080 上运行');
20});
21
22

步骤 3:启动代理服务器

运行以下命令:

sh Copy
1复制
2编辑
3node server.js
4
5

现在,您的 Node Unblocker 代理已在 http://localhost:8080 上运行。您可以通过在 /proxy/ 后附加 URL 来访问网站,例如:

bash Copy
1复制
2编辑
3http://localhost:8080/proxy/https://www.example.com
4
5

3. 将 Node Unblocker 与 Puppeteer 集成以进行网页抓取

要使用 Puppeteer 抓取网站,同时通过 Node Unblocker 路由请求,请按如下方式修改您的抓取脚本:

示例:将 Puppeteer 与 Node Unblocker 结合使用

javascript Copy
1复制
2编辑
3const puppeteer = require('puppeteer');
4
5(async () => {
6const browser = await puppeteer.launch();
7const page = await browser.newPage();
8
9// 通过 Node Unblocker 代理访问网站
10await page.goto('http://localhost:8080/proxy/https://example.com', { waitUntil: 'networkidle2' });
11
12console.log(await page.title());
13
14await browser.close();
15})();
16
17

示例:将 Axios 与 Node Unblocker 结合使用 如果您更喜欢使用 Axios 获取数据,请通过 Node Unblocker 代理路由您的请求:

javascript Copy
1复制
2编辑
3const axios = require('axios');
4
5(async () => {
6const respond = await axios.get('http://localhost:8080/proxy/https://example.com');
7console.log(response.data);
8})();
9
10

4. 使用 Puppeteer 的外部代理

对于大规模网页抓取,住宅代理(例如 MoMoProxy)比免费代理或数据中心 IP 提供更佳的性能。

示例:使用 HTTP 代理

javascript Copy
1复制
2编辑
3const puppeteer = require('puppeteer');
4
5(async () => {
6const proxyServer = 'http://用户名:密码@代理服务器:端口';
7
8const browser = await puppeteer.launch({
9headless: true,
10args: [`--proxy-server=${proxyServer}`],
11});
12
13const page = await browser.newPage();
14await page.authenticate({ username: '你的用户名', password: '你的密码' });
15
16await page.goto('https://www.example.com');
17console.log(await page.title());
18
19await browser.close();
20})();
21
22

示例:使用 SOCKS5 代理

javascript Copy
1复制
2编辑
3const puppeteer = require('puppeteer');
4
5(async () => {
6const proxyServer = 'socks5://proxy-ip:port';
7
8const browser = await puppeteer.launch({
9headless: true,
10args: [`--proxy-server=${proxyServer}`],
11});
12
13const page = await browser.newPage();
14await page.goto('https://www.example.com');
15
16console.log(await page.title());
17
18await browser.close();
19})();
20
21

5. 自动轮换代理

为了避免被封禁和验证码,请使用代理链轮换代理。

javascript Copy
1复制
2编辑
3const puppeteer = require('puppeteer');
4const proxyChain = require('proxy-chain');
5
6(async () => {
7const oldProxyUrl = 'http://username:password@proxy-ip:port';
8const newProxyUrl = await proxyChain.anonymizeProxy(oldProxyUrl);
9
10const browser = await puppeteer.launch({
11headless: true,
12args: [`--proxy-server=${newProxyUrl}`],
13});
14
15const page = await browser.newPage();
16await page.goto('https://www.example.com');
17
18console.log(await page.title());
19
20await browser.close();
21await proxyChain.closeAnonymizedProxy(newProxyUrl);
22})();
23
24

6. 在服务器上部署 Node Unblocker

为了确保持续运行,请在云服务器上部署 Node Unblocker。您可以使用:

  • AWS EC2
  • DigitalOcean Droplets
  • Heroku(提供免费套餐)

将 Node Unblocker 作为后台进程运行

使用 PM2 保持代理运行:

sh Copy
1复制
2编辑
3npm install -g pm2
4pm2 start server.js --name "node-unblocker"
5pm2 save
6
7

7. 常见问题处理

❌ Puppeteer 无法加载页面? ✅ 使用 curl 检查代理是否正常工作:

sh Copy
1复制
2编辑
3curl -x http://proxy-ip:port -L https://www.example.com
4
5

✅ 如果网站检测到机器人流量,请使用隐身模式:

sh Copy
1复制
2编辑
3npm install puppeteer-extra puppeteer-extra-plugin-stealth
4
5
javascript Copy
1复制
2编辑
3const puppeteer = require('puppeteer-extra');
4const StealthPlugin = require('puppeteer-extra-plugin-stealth');
5
6puppeteer.use(StealthPlugin());
7
8(async () => {
9const browser = await puppeteer.launch();
10const page = await browser.newPage();
11await page.goto('https://www.example.com');
12console.log(await page.title());
13await browser.close();
14})();
15
16

结论

Node Unblocker 是一款强大的工具,可在网页抓取时绕过网站限制。与 Puppeteer 和旋转代理结合使用,它可提供高效且不可检测的抓取解决方案。

正在寻找可靠的住宅代理?考虑使用 MoMoProxy 进行地理解锁和防检测抓取。

Consent Preferences