使用Cheerio抓取<li>元素失败,如何提取目标列表项内容?
解决Cheerio抓取特定元素的问题
问题分析
你原有的选择器过度依赖DOM深层层级结构,页面结构稍有变动就会失效,同时没有排除最后那个用于搜索的<li>元素,这是抓取失败的核心原因。
优化方案
目标列表项都带有select2-selection__choice专属类,直接通过这个类定位更可靠,同时自动过滤掉不需要的搜索项:
方案一:清理文本内容
$('ul.select2-selection__rendered li.select2-selection__choice').each((i, el) => { // 移除文本开头的删除符号并清理空格 const programText = $(el).text().replace('×', '').trim(); console.log(programText); });
方案二:精准提取目标文本节点
$('ul.select2-selection__rendered li.select2-selection__choice').each((i, el) => { // 筛选出非span的子节点,直接提取纯目标文本 const programText = $(el).contents().not('span').text().trim(); console.log(programText); });
方案优势
- 选择器更稳定:用类选择器替代深层路径,避免因页面结构调整导致抓取失败
- 自动过滤无效项:最后一个带
select2-search类的搜索框<li>不会被选中 - 文本处理更干净:两种方式都能移除多余的删除符号,得到纯净的专业名称文本
内容的提问来源于stack exchange,提问作者ssudo
相关产品推荐
相关产品推荐

