如何使用NodeJS Cheerio爬取维基百科S&P500成分股的股票代码列
问题原因及修复方案
核心错误点
- 选择器逻辑错误:原选择器仅匹配表格第一行的全部单元格,未覆盖所有成分股行;部分场景下Cheerio不会识别页面自动生成的
tbody标签,无需显式声明tbody - 遍历逻辑错位:需要遍历所有成分股行提取首列内容,而非遍历单个行的所有子元素
- 冗余依赖:代码中引入的express、http相关依赖未被使用,可以直接移除
修正后可运行代码
const cheerio = require('cheerio'); const axios = require("axios"); async function getSP500Symbols() { try { const url = 'https://en.wikipedia.org/wiki/List_of_S%26P_500_companies' const { data } = await axios.get(url) const $ = cheerio.load(data) const symbols = [] // 选择成分股表格所有行,跳过表头行 $('#constituents tr').slice(1).each((index, row) => { // 取每行第一个单元格的文本,去除空白字符 const symbol = $(row).find('td:first').text().trim() if (symbol) symbols.push(symbol) }) // 输出结果,可根据需求调整 console.log('共计获取标普500成分股代码数量:', symbols.length) console.log('前10个代码示例:', symbols.slice(0,10)) return symbols } catch (err) { console.error('爬取失败:', err) } } getSP500Symbols()
运行效果
执行代码后会输出爬取到的所有成分股代码数组,默认会打印总数量和前10个代码示例,可直接使用返回的symbols数组做后续处理。
内容的提问来源于stack exchange,提问作者Dave Michaels
相关产品推荐
相关产品推荐

