You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求Node.js多页面网页抓取示例:含搜索结果页翻页功能

Node.js 多页面搜索结果抓取示例

我之前做过类似的需求,用 axios 发起HTTP请求、cheerio 解析HTML就能实现自动翻页抓取搜索结果的功能,下面是一个完整的可运行示例:

第一步:安装依赖

首先在项目里安装需要的包:

npm install axios cheerio

第二步:完整代码实现

const axios = require('axios');
const cheerio = require('cheerio');

// 模拟浏览器请求头,避免被目标网站拦截
const headers = {
  'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36'
};

// 存储所有抓取到的结果
let allResults = [];

// 核心抓取函数,支持递归翻页
async function scrapeSearchPage(url) {
  try {
    console.log(`正在抓取页面:${url}`);
    // 发起请求获取页面HTML
    const response = await axios.get(url, { headers });
    const $ = cheerio.load(response.data);

    // ******** 这里根据目标网站的结构提取数据 ********
    // 示例:假设搜索结果是在class为"search-result-item"的元素里
    $('.search-result-item').each((index, element) => {
      const title = $(element).find('.result-title').text().trim();
      const link = $(element).find('.result-title a').attr('href');
      const description = $(element).find('.result-desc').text().trim();
      
      if (title && link) {
        allResults.push({ title, link, description });
      }
    });

    // ******** 检测并处理下一页 ********
    // 示例:假设"下一页"按钮的选择器是".next-page-btn",需要根据目标网站调整
    const nextPageBtn = $('.next-page-btn');
    if (nextPageBtn.length > 0) {
      let nextPageUrl = nextPageBtn.attr('href');
      // 如果是相对路径,拼接成完整URL
      if (!nextPageUrl.startsWith('http')) {
        const baseUrl = new URL(url).origin;
        nextPageUrl = new URL(nextPageUrl, baseUrl).href;
      }
      // 递归抓取下一页(加个延迟避免请求太频繁)
      await new Promise(resolve => setTimeout(resolve, 1000));
      await scrapeSearchPage(nextPageUrl);
    } else {
      console.log('已抓取完所有页面');
      // 所有页面抓取完成后,处理结果(比如保存到文件)
      console.log('抓取到的总结果数:', allResults.length);
      console.log('部分结果示例:', allResults.slice(0, 3));
    }
  } catch (error) {
    console.error(`抓取页面 ${url} 时出错:`, error.message);
  }
}

// 启动抓取,替换成你的目标搜索结果页面URL
const startUrl = 'https://example.com/search?q=your-keyword';
scrapeSearchPage(startUrl);

关键说明

  • 选择器调整:你需要根据目标网站的实际HTML结构,修改提取结果的选择器($('.search-result-item') 部分)和下一页按钮的选择器($('.next-page-btn')),可以用浏览器的开发者工具(F12)查看元素结构。
  • 反爬应对:如果目标网站有反爬机制,可以增加请求延迟(示例里加了1秒)、使用代理IP,或者改用 puppeteer 来处理动态渲染的页面(比如下一页按钮是通过JavaScript加载的情况)。
  • 错误处理:示例里做了基础的错误捕获,你可以根据需求扩展,比如增加重试机制。

如果是动态渲染的页面(比如用React/Vue生成的搜索结果),用puppeteer的核心思路:

  1. 安装 puppeteer:npm install puppeteer
  2. 启动浏览器实例打开页面,等待目标元素加载,提取数据后,模拟点击下一页按钮(如果存在),重复抓取逻辑即可。

内容的提问来源于stack exchange,提问作者EKC826

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:51:14