使用JavaScript爬取Discogs网站:标签提取结果异常问题
解决Discogs页面标签提取错误的问题
问题根源
你使用的$('td a').text().trim()存在两个核心问题:
- 会选中页面所有td内的a标签,而非仅Label对应的目标td,容易混入无关内容
- 仅提取a标签的文本,丢失了td内附带的编号(如
SHVL 767)等关键信息
解决方案
根据不同需求,提供两种针对性实现:
1. 提取完整的标签条目(含标签名+编号)
先精准定位到Label对应的td,再分割处理内部内容:
// 定位到Label所在行的目标td元素 const labelTd = $('th:contains("Label")').next('td'); // 分割并清理每个标签条目 const fullLabelItems = labelTd.text() .split(',') .map(item => item.trim()) .filter(item => item.length > 0); console.log(fullLabelItems); // 输出结果:["Harvest – SHVL 767", "Harvest – 1E 062 o 90749"]
2. 提取去重后的标签名
如果只需要唯一的标签名称,可提取a标签文本并去重:
const labelTd = $('th:contains("Label")').next('td'); // 提取所有a标签文本并去重 const uniqueLabels = [...new Set( labelTd.find('a').map((_, el) => $(el).text().trim()).get() )]; console.log(uniqueLabels); // 输出结果:["Harvest"]
关键说明
Discogs发布页面的Label信息,固定位于<th>Label</th>对应的下一个<td>内,通过th:contains("Label")精准定位,可避免抓取无关内容。
内容的提问来源于stack exchange,提问作者dnnywld
相关产品推荐
相关产品推荐

