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

如何用Node.js/Cheerio/Axios/Express抓取网页隐藏DOM元素

抓取带hidden属性的隐藏DOI数据实现方案

你爬虫里用的类jQuery选择器(Node.js爬虫场景一般是cheerio库)不会因为元素带有hidden属性就匹配不到,只要节点存在于你拿到的HTML源码里,直接用属性选择器定位即可,抓取逻辑和普通可见元素没有本质区别。

  • 定位目标节点用属性选择器div[hidden],可以直接匹配所有带hidden属性的div元素
  • 为了避免匹配到页面里其他无关的隐藏div,提取文本后加一层格式校验,确认内容是https://doi.org/开头的DOI链接再存入结果,避免混入脏数据
  • 注意不要用:visible这类过滤可见元素的选择器,会自动把带hidden属性的节点排除掉

代码修改示例

你可以在原有抓取标题的逻辑基础上,增加DOI抓取逻辑,注意要通过单篇文章的外层父节点关联标题和对应DOI,避免出现内容错位:

const articles = []
$('.js-article-title', html).each(function () {
  // 提取标题,trim去掉首尾多余的换行、空格
  const title = $(this).text().trim()
  const currentArticle = {
    title
  }

  // 先定位到当前标题所属的单篇文章外层容器,你需要根据实际页面DOM调整closest里的选择器
  // 常见的文章外层容器标签/类名可以是article、.list-item、.article-card等
  const articleWrapper = $(this).closest('article, .article-list-item')
  // 在当前文章容器内查找带hidden属性的div
  articleWrapper.find('div[hidden]').each(function () {
    const hiddenContent = $(this).text().trim()
    // 校验内容为DOI链接才存入
    if (hiddenContent.startsWith('https://doi.org/')) {
      currentArticle.doi = hiddenContent
    }
  })

  articles.push(currentArticle)
})

如果测试时发现选择器匹配不到,可以先直接全局搜$('div[hidden]', html)打印所有匹配到的内容,确认目标节点确实存在于你拿到的HTML源码里(部分站点的隐藏内容是前端JS动态渲染的,这种情况需要先拿到渲染后的页面源码再做解析)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 01:24:22