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

使用Cheerio爬取naukri.com未获取预期页面文本问题求助

解决Naukri.com爬取仅返回GTM/Akamai内容的问题

我来帮你搞定这个爬取问题!你遇到的情况是因为Naukri.com做了多层反爬防护,直接用Axios+Cheerio请求静态HTML根本拿不到实际的招聘内容,下面给你拆解原因和解决方案:

为什么会只拿到GTM和Akamai像素?

  • 反爬检测拦截:Naukri用了Akamai的反爬系统,你的请求没有携带浏览器常用的请求头(比如User-Agent),被识别成了非人类爬虫,返回的是验证用的占位内容,而不是真实页面。
  • 静态HTML局限性:Cheerio只能解析页面初始加载的静态HTML,但Naukri的招聘信息是通过JavaScript动态渲染出来的,初始HTML里只有加载脚本和跟踪代码,没有实际的职位数据。

解决方案1:添加浏览器请求头尝试绕过基础检测

先给你的Axios请求加上模拟浏览器的请求头,看看能不能通过基础验证:

'use strict';
const { default: axios } = require('axios');
const cheerio = require('cheerio');

async function jobUrls() {
  try {
    const siteUrl = 'https://www.naukri.com/cse-jobs?k=cse';
    const { data } = await axios({
      method: 'GET',
      url: siteUrl,
      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',
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
        'Accept-Language': 'en-US,en;q=0.5',
        'Referer': 'https://www.naukri.com/'
      },
    });
    const $ = cheerio.load(data);
    console.log($.text())
  } catch (er) {
    console.log(er)
  }
}
jobUrls();

不过这个方法不一定能长期生效,因为Akamai的检测逻辑会不断更新。

解决方案2:用Puppeteer模拟真实浏览器(推荐)

如果基础请求头不管用,就用Puppeteer这类工具模拟真实浏览器,它会执行页面的JavaScript,渲染出完整的页面内容,完美解决动态加载和反爬问题。

步骤1:安装Puppeteer

npm install puppeteer

步骤2:修改你的爬取代码

'use strict';
const puppeteer = require('puppeteer');
const cheerio = require('cheerio');

async function jobUrls() {
  try {
    // 启动浏览器(headless模式不弹出窗口)
    const browser = await puppeteer.launch({ headless: 'new' });
    const page = await browser.newPage();
    
    // 设置浏览器的User-Agent,模拟真实Chrome
    await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36');
    
    // 导航到目标页面,等待网络空闲确保内容加载完成
    await page.goto('https://www.naukri.com/cse-jobs?k=cse', { waitUntil: 'networkidle2' });
    
    // 获取渲染后的完整HTML
    const html = await page.content();
    const $ = cheerio.load(html);
    
    // 现在可以提取你需要的招聘信息了,比如职位标题
    console.log('=== 职位列表 ===');
    $('.title').each((index, element) => {
      console.log(`${index + 1}. ${$(element).text().trim()}`);
    });
    
    // 关闭浏览器
    await browser.close();
  } catch (error) {
    console.error('爬取出错:', error);
  }
}

jobUrls();

重要提醒

  • 不要频繁发送请求,建议在请求之间加延迟(比如await page.waitForTimeout(1000)),避免被网站封禁IP。
  • 务必遵守Naukri.com的使用条款和robots.txt规则,非法爬取可能会引发法律问题。

内容的提问来源于stack exchange,提问作者Go For Pro

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 21:12:51