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
相关产品推荐
相关产品推荐

