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

JavaScript网页抓取处理空<dt>值 输出固定列Excel兼容数据

解决方案

把原有「抓到什么字段就追加什么字段」的逻辑调整为「先初始化所有预设字段默认值为"n/a",再用抓到的有效值覆盖对应字段」,就能保证输出结构完全固定,直接适配Excel固定列写入需求。

核心改动点

  • 初始化结果时就把所有预设列的值设为"n/a",字段顺序和Excel列顺序完全对齐,从根源避免字段缺失、顺序错乱问题
  • 匹配到有效<dt>-<dd>组合时,直接更新结果对象里的对应属性,不再零散push对象
  • 新增文本去空格、DOM空值容错,避免空格、空节点导致匹配失败或者值异常

优化后可直接运行的代码

// 字段配置顺序保持和Excel列顺序一致即可
const columns = [
  { text: 'Website', name: 'Website' },
  { text: 'Phone', name: 'Phone' },
  { text: 'Industry', name: 'Industry' },
  { text: 'Company size', name: 'Companysize' },
  { text: 'Headquarters', name: 'Headquarters' },
  { text: 'Founded', name: 'Founded' },
  { text: 'Specialties', name: 'Specialties' },
  { text: 'Employees', name: 'Employees' }  
]

// 初始化固定结构结果,所有字段默认填充n/a
const result = columns.reduce((res, col) => {
  res[col.name] = "n/a"
  return res
}, {})

// 遍历页面描述列表项
const dtElements = document.querySelectorAll('dl dt')
dtElements.forEach(dt => {
  const dtContent = dt.innerText?.trim()
  if (!dtContent) return
  // 匹配预设字段
  const matchRule = new RegExp(dtContent, 'i')
  const matchedCol = columns.find(col => matchRule.test(col.text))
  if (!matchedCol) return

  // 读取对应dd的内容,非空时覆盖默认值
  const ddEl = dt.nextElementSibling
  const ddContent = ddEl?.innerText?.trim()
  if (ddContent) {
    result[matchedCol.name] = ddContent
  }
})

// 如果需要数组格式直接写入Excel,执行下面这行即可,输出数组顺序和columns完全一致
// const excelRow = columns.map(col => result[col.name])

使用提示

  • 如果后续要调整Excel列顺序,只需要调整columns数组的元素顺序就行,不用改其他逻辑
  • 代码里加了可选链做容错,遇到LinkedIn页面局部加载失败、DOM结构异常的情况不会抛出错误中断抓取
  • 所有文本都做了首尾空格去除处理,避免LinkedIn页面里的隐藏换行、缩进字符导致匹配失败或者写入Excel后出现多余空白

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 08:33:35