CAPSOLVER
博客
使用 Cheerio 和 Node.js 进行网页爬虫 2026

使用 Cheerio 和 Node.js 进行网络爬虫 2026

Logo of CapSolver

Anh Tuan

Data Science Expert

20-Nov-2025

网页抓取是一种从网站中提取数据的强大技术,广泛用于数据分析、市场研究和内容聚合。截至2026年,利用 Cheerio 和 Node.js 进行网页抓取仍然是一个受欢迎且高效的方法。本文将深入探讨使用 Cheerio 和 Node.js 进行网页抓取的过程,提供全面的指南和一个实际示例。

目录

  • 什么是 Cheerio?
  • 前提条件
  • 设置项目
  • Cheerio 的选择器 API
  • 编写抓取脚本
  • 运行脚本
  • 使用 Cheerio 进行网页抓取的挑战
  • 处理网页抓取中的验证码
  • 处理动态页面
  • 结论

什么是 Cheerio?

Cheerio 是一个快速、灵活且轻量级的 jQuery 核心实现,专为服务器端应用程序设计。它允许开发人员在 Node.js 环境中使用熟悉的 jQuery 语法解析和操作 HTML 文档。与基于浏览器的工具不同,Cheerio 不会实际渲染网页,而是直接操作 HTML 字符串,这使其在许多抓取任务中非常高效。顺便提一下 Puppeteer 是一个很棒的 Cheerio 抓取替代方案。

前提条件

在深入代码之前,请确保您的系统上已安装 Node.js 和 npm(Node 包管理器)。如果尚未安装,您可以从 Node.js 官方网站 下载并安装它们。

设置项目

步骤 1:创建新项目目录

首先,为您的项目创建一个新目录并将其初始化为 Node.js 项目:

bash 复制代码
mkdir web-scraping
cd web-scraping
npm init -y

-y 标志会自动回答所有提示,设置一个默认的 package.json 文件。

步骤 2:安装依赖

接下来,安装必要的依赖项,包括 axios 用于发起 HTTP 请求和 cheerio 用于解析 HTML:

bash 复制代码
npm install axios cheerio

反复失败解决令人烦恼的验证码?

通过 Capsolver 的 AI 驱动的自动网页解锁技术,实现无缝自动验证码解决!

领取您的 奖励代码 以获得顶级验证码解决方案;CapSolver. |: WEBS。兑换后,每次充值后您将获得额外的 5% 奖励,无限次

Cheerio 的选择器 API

Cheerio 是一个快速、灵活且轻量级的 jQuery 核心实现,专为服务器端设计。它允许您在 Node.js 环境中使用类似 jQuery 的语法操作 HTML 文档。

以下是 Cheerio 选择器 API 的详细说明及代码示例:

  1. 加载 HTML 文档

    javascript 复制代码
    const cheerio = require('cheerio');
    const html = `
      <html>
        <head>
          <title>示例</title>
        </head>
        <body>
          <h1 class="title">你好,世界!</h1>
          <div id="content">
            <p>这是一个段落。</p>
            <a href="https://example.com">链接</a>
          </div>
        </body>
      </html>
    `;
    const $ = cheerio.load(html);
  2. 选择元素

    • 元素选择器

      javascript 复制代码
      const h1 = $('h1'); // 选择所有 <h1> 元素
      console.log(h1.text()); // 输出:你好,世界!
    • 类选择器

      javascript 复制代码
      const title = $('.title'); // 选择 class="title" 的元素
      console.log(title.text()); // 输出:你好,世界!
    • ID 选择器

      javascript 复制代码
      const content = $('#content'); // 选择 id="content" 的元素
      console.log(content.html()); // 输出: <p>这是一个段落。</p><a href="https://example.com">链接</a>
    • 属性选择器

      javascript 复制代码
      const link = $('a[href="https://example.com"]'); // 选择具有特定 href 属性的 <a> 元素
      console.log(link.text()); // 输出:链接
  3. 遍历和操作元素

    • 遍历元素

      javascript 复制代码
      $('p').each((index, element) => {
        console.log($(element).text()); // 输出每个 <p> 元素的文本内容
      });
    • 修改元素内容

      javascript 复制代码
      $('h1.title').text('新标题'); // 修改 <h1> 元素的文本内容
      console.log($('h1.title').text()); // 输出:新标题
    • 添加和删除元素

      javascript 复制代码
      $('#content').append('<p>另一段文字。</p>'); // 在 #content 内添加新的 <p> 元素
      console.log($('#content').html()); // 输出: <p>这是一个段落。</p><a href="https://example.com">链接</a><p>另一段文字。</p>
      
      $('a').remove(); // 删除所有 <a> 元素
      console.log($('#content').html()); // 输出: <p>这是一个段落。</p><p>另一段文字。</p>

这些示例展示了如何使用 Cheerio 的选择器 API 以类似 jQuery 的方式选择、遍历和操作 HTML 元素,但是在 Node.js 环境中。

编写抓取脚本

在项目目录中创建一个名为 scraper.js 的文件。该文件将包含抓取目标网站数据的脚本。将以下代码添加到 scraper.js 中:

javascript 复制代码
const axios = require('axios');
const cheerio = require('cheerio');

// 目标 URL
const url = 'https://example.com';

async function fetchData() {
  try {
    // 发起 HTTP 请求以获取 HTML 内容
    const { data } = await axios.get(url);
    // 将 HTML 文档加载到 Cheerio 中
    const $ = cheerio.load(data);

    // 从 HTML 中提取数据
    const title = $('title').text();
    const headings = [];
    $('h1, h2, h3').each((index, element) => {
      headings.push($(element).text());
    });

    // 输出提取的数据
    console.log('标题:', title);
    console.log('标题内容:', headings);
  } catch (error) {
    console.error('获取数据时出错:', error);
  }
}

fetchData();

代码说明

  1. 导入模块:脚本首先导入 axioscheerio 模块。
  2. 定义目标 URL:定义要抓取的网站 URL。
  3. 获取数据fetchData 函数使用 axios 向目标 URL 发起 HTTP GET 请求。响应数据(HTML 内容)随后加载到 Cheerio 中。
  4. 解析 HTML:使用 Cheerio 的类似 jQuery 的语法,脚本提取 <title> 标签和所有 <h1><h2><h3> 标签的内容。
  5. 输出结果:提取的数据被记录到控制台。

运行脚本

要在终端中运行抓取脚本,请执行以下命令:

bash 复制代码
node scraper.js

如果一切设置正确,您应该会看到抓取的网页标题和所有标题标签的内容打印到控制台。

使用 Cheerio 进行网页抓取的挑战

虽然 Cheerio 为网页抓取提供了许多优势,但开发人员在使用过程中也会遇到一些挑战:

  1. 动态网站和 JavaScript:使用 Cheerio 的主要挑战之一是处理依赖大量 JavaScript 的动态网站。现代网站通常在初始页面加载后使用 JavaScript 动态加载内容。由于 Cheerio 解析的是静态 HTML,它可能无法捕获动态生成的内容,这可能会限制抓取的有效性。

  2. 反抓取措施:网站会部署多种反抓取技术以阻止自动化数据提取:

    • 验证码:在抓取过程中可能遇到的主要问题,验证码旨在区分人类和机器人,需要用户完成图像识别或文本输入等任务。
    • IP 阻止:网站可能会阻止与抓取活动相关的 IP 地址以防止过多请求。
    • 用户代理检测:检测非标准或可疑的用户代理有助于网站识别并阻止抓取者。
    • 动态网页:使用动态 JavaScript 内容生成的网页可能带来挑战,因为内容可能无法通过 Cheerio 的静态解析直接访问。

作为网页抓取开发者,了解这些挑战对于有效解决它们至关重要。有许多策略可以缓解这些问题,接下来我们将解释如何解决抓取中的两个最大问题:验证码解决方案以及如何处理动态页面。

处理网页抓取中的验证码

验证码在网页抓取中是一个重大挑战,因为它们旨在区分人类和机器人。遇到验证码时,您的抓取脚本必须解决它们才能高效运行。对于可扩展的网页抓取项目,CapSolver 等解决方案提供了高准确性和快速验证码解决能力。

集成验证码解决服务

可以将各种验证码解决服务集成到您的抓取脚本中。在这里,我们专注于 CapSolver:

步骤 1:注册 CapSolver

首先,访问 CapSolver 用户面板 并注册您的账户。

步骤 2:获取您的 API 密钥

注册后,从主页面板中获取您的 API 密钥。

CapSolver 集成的示例代码

将 CapSolver 集成到您的网页抓取或自动化项目中非常简单。以下是一个 Python 示例,展示如何使用 CapSolver 的 API:

python 复制代码
# pip install requests
import requests
import time

# TODO:设置您的配置
api_key = "YOUR_API_KEY"  # 您的 CapSolver API 密钥
site_key = "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-"  # 目标网站的 reCAPTCHA 网站密钥
site_url = ""  # 您的目标网站的 URL


def solve_captcha():
    payload = {
        "clientKey": api_key,
        "task": {
            "type": 'ReCaptchaV2TaskProxyLess',
            "websiteKey": site_key,
            "websiteURL": site_url
        }
    }
    res = requests.post("https://api.capsolver.com/createTask", json=payload)
    resp = res.json()
    task_id = resp.get("taskId")
    if not task_id:
        print("创建任务失败:", res.text)
        return
    print(f"获取到 taskId: {task_id} / 正在获取结果...")

    while True:
        time.sleep(3)  # 延迟
        payload = {"clientKey": api_key, "taskId": task_id}
        res = requests.post("https://api.capsolver.com/getTaskResult", json=payload)
        resp = res.json()
        status = resp.get("status")
        if status == "ready":
            return resp.get("solution", {}).get('gRecaptchaResponse')
        if status == "failed" or resp.get("errorId"):
            print("解决方案失败!响应内容:", res.text)
            return


captcha_token = solve_captcha()
print(captcha_token)

此脚本展示了如何利用 CapSolver 的 API 解决 reCAPTCHA 挑战。将此类解决方案集成到您的抓取项目中可以提高效率,通过自动化验证码解决来简化数据提取过程。

处理动态页面

对于通过 JavaScript 动态加载内容的网页,您可能需要使用无头浏览器如 puppeteer。Puppeteer 可以模拟真实用户浏览网页,从而允许您抓取仅在 JavaScript 执行后出现的内容。

使用 Puppeteer 的示例

以下是结合 Cheerio 使用 Puppeteer 的简要示例:

javascript 复制代码
const puppeteer = require('puppeteer');
const cheerio = require('cheerio');

async function fetchData() {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('https://example.com');

  const content = await page.content();
  const $ = cheerio.load(content);

  const title = $('title').text();
  const headings = [];
  $('h1, h2, h3').each((index, element) => {
    headings.push($(element).text());
  });

  console.log('标题:', title);
  console.log('标题内容:', headings);

  await browser.close();
}

fetchData();

此脚本启动一个无头浏览器,导航到目标 URL,并在 JavaScript 执行后获取 HTML 内容。然后使用 Cheerio 解析 HTML 并提取所需数据。

结论

使用 Cheerio 和 Node.js 进行网页抓取是一种高效提取网站数据的强大组合。Cheerio 的类似 jQuery 的语法使您能够轻松浏览和操作 HTML 文档,而 Node.js 为处理 HTTP 请求和数据处理提供了强大的环境。

然而,开发人员必须意识到动态内容和反抓取措施(如验证码)带来的挑战。集成 CapSolver 等解决方案可以帮助克服这些障碍,确保您的抓取脚本保持有效和可靠。

希望本文能帮助您在 2026 年开始网页抓取,并为您的项目提供有用的数据!

合规声明: 本博客提供的信息仅供参考。CapSolver 致力于遵守所有适用的法律和法规。严禁以非法、欺诈或滥用活动使用 CapSolver 网络,任何此类行为将受到调查。我们的验证码解决方案在确保 100% 合规的同时,帮助解决公共数据爬取过程中的验证码难题。我们鼓励负责任地使用我们的服务。如需更多信息,请访问我们的服务条款和隐私政策。

更多

在网页抓取时如何解决验证码:使用 Scrapling 和 CapSolver
如何使用 Scrapling 和 CapSolver 解决验证码

Scrapling + CapSolver 支持通过 ReCaptcha v2/v3 和 Cloudflare Turnstile 绕过进行自动化抓取。

web scraping
Logo of CapSolver

Ethan Collins

05-Dec-2025

使用 Selenium 和 Python 进行网页爬虫
使用Selenium和Python进行网络爬虫 | 解决网络爬虫中的验证码

在本文中,您将掌握使用Selenium和Python进行网络爬虫,并学习如何解决过程中遇到的Captcha,以实现高效的数据提取。

web scraping
Logo of CapSolver

Ethan Collins

04-Dec-2025

使用Colly进行Go语言网络爬虫
使用Colly进行Go语言网络爬虫

在本文中,我们将深入探讨使用Go语言和Colly库进行网络爬虫。指南首先帮助您设置Go语言项目并安装Colly库。然后我们逐步讲解如何创建一个基础爬虫,从维基百科页面中提取链接,展示Colly的易用性和强大功能。

web scraping
Logo of CapSolver

Ethan Collins

04-Dec-2025

什么是网络爬虫
什么是网络爬虫 | 常见应用场景和问题

了解网络爬虫:学习其优势,轻松应对挑战,并通过CapSolver提升您的业务。

web scraping
Logo of CapSolver

Anh Tuan

03-Dec-2025

什么是 Puppeteer
什么是Puppeteer以及如何在网页爬虫中使用 | 完整指南 2026

本完整指南将深入探讨Puppeteer是什么以及如何在网页爬取中有效使用它。

web scraping
Logo of CapSolver

Nikolai Smirnov

03-Dec-2025

如何制作一个AI代理网络爬虫(适合初学者的教程)
如何制作一个AI代理网络爬虫(适合初学者的教程)

通过这个适合初学者的教程,学习如何从零开始创建AI智能体网络爬虫。了解核心组件、代码示例以及如何绕过反机器人措施(如验证码)以确保可靠的数据采集。

web scraping
Logo of CapSolver

Lucas Mitchell

02-Dec-2025