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

使用got-scraping与cheerio解析IMDB电影关联页时无法加载更多内容

解决IMDB电影关联页面“显示更多”内容无法抓取的问题

你尝试抓取IMDB电影关联页面(对应ID:tt0090887)时,遇到“显示更多”按钮加载的内容无法通过got-scraping+cheerio获取的问题,核心原因是:这些内容是动态加载的——静态HTTP请求只能拿到页面初始渲染的HTML,而“显示更多”触发的内容是通过AJAX接口异步获取的,不会包含在初始返回的HTML中,所以cheerio无法解析到这部分数据。

下面提供两种可行的解决方案:

方法1:直接调用IMDB的GraphQL接口获取全量数据

IMDB的动态内容通过GraphQL接口提供,你可以跳过页面渲染,直接请求该接口拿到完整的关联数据,效率更高。

示例代码:

const { gotScraping } = require("got-scraping");

const scrapeFullConnections = async (id) => {
  try {
    const graphqlUrl = "https://api.imdb.com/graphql";
    // 定义GraphQL查询语句,按需调整字段
    const query = `
      query MovieConnections($titleId: ID!) {
        title(id: $titleId) {
          movieConnections {
            edges {
              node {
                category
                connections {
                  text
                  url
                }
              }
            }
          }
        }
      }
    `;

    const response = await gotScraping.post(graphqlUrl, {
      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",
        "Referer": `https://www.imdb.com/title/${id}/movieconnections/`,
        "Content-Type": "application/json"
      },
      json: {
        query: query,
        variables: { titleId: id }
      }
    });

    const data = JSON.parse(response.body);
    // 处理返回的全量关联数据
    console.log("完整关联数据:", data.data.title.movieConnections.edges);
  } catch (err) {
    console.error(err);
  }
};

// 执行抓取
scrapeFullConnections("tt0090887");

方法2:用无头浏览器模拟页面渲染

如果不想研究接口逻辑,可以使用Puppeteer这类无头浏览器工具,模拟真实浏览器加载页面、执行JS并点击“显示更多”按钮,从而获取完整的DOM内容。

示例代码:

const puppeteer = require("puppeteer");
const cheerio = require("cheerio");

const scrapeWithPuppeteer = async (id) => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  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.imdb.com/title/${id}/movieconnections/`, { waitUntil: "networkidle2" });

  // 遍历并点击所有“显示更多”按钮
  const showMoreButtons = await page.$$("button.ipc-btn--expand");
  for (const btn of showMoreButtons) {
    try {
      await btn.click();
      await page.waitForTimeout(500); // 等待内容加载完成
    } catch (err) {
      // 忽略已被移除的按钮
      continue;
    }
  }

  // 获取完整页面HTML
  const html = await page.content();
  await browser.close();

  // 用cheerio解析完整DOM
  const $ = cheerio.load(html);
  $(".ipc-page-grid__item")
    .find(".ipc-page-section")
    .each((index, element) => {
      let cat = $(element).find(".ipc-title__text > span").attr("id");
      if (cat) {
        let conexions = [];
        $(element).find("ul.ipc-metadata-list > li").each((k, elem) => {
          const title_conex = $(elem).find("ul.ipc-inline-list > div > div > p").text().trim();
          const href_conex = $(elem).find("ul.ipc-inline-list > div > div > p > a").attr("href");
          conexions.push({ titol: title_conex, href: href_conex });
        });
        console.log(`${cat}类别:`, conexions);
      }
    });
};

// 执行抓取
scrapeWithPuppeteer("tt0090887");

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 16:25:08