使用Cheerio+ScrapeNinja提取di-slider下图片src报错求助
解决Cheerio提取嵌套picture标签内img的src报错问题
错误原因
这个报错是因为目标HTML里的img标签src属性值格式不规范——以://开头缺少http/https协议头,Cheerio解析这种非标准HTML时触发了语法错误。
解决方案
1. 先修复HTML里的不规范src
在把HTML传给Cheerio解析前,先批量替换掉所有://开头的src值,补上https协议头:
// 假设你从ScrapeNinja拿到的原始HTML存在html变量里 const fixedHtml = html.replace(/src=":\/\/(.+?)"/g, 'src="https://$1"'); const $ = cheerio.load(fixedHtml);
2. 正确提取嵌套结构里的img的src
因为img可能嵌套在picture标签里(都属于di-slider下的元素),用层级选择器覆盖所有嵌套的img:
// 提取.di-slider下所有img标签的src(包括picture里的) const imgSrcs = $('.di-slider img').map((index, element) => { return $(element).attr('src'); }).get(); console.log(imgSrcs);
3. 备选:开启Cheerio宽松解析模式
如果预处理后还是有解析问题,给Cheerio加配置允许非标准HTML:
const $ = cheerio.load(html, { strictMode: false, // 关闭严格解析 lowerCaseTags: true, lowerCaseAttributeNames: true });
完整示例代码
const cheerio = require('cheerio'); // 替换成你从ScrapeNinja获取的实际HTML const html = `<!-- 包含.di-slider和嵌套picture标签的目标HTML -->`; // 修复不规范的src属性 const fixedHtml = html.replace(/src=":\/\/(.+?)"/g, 'src="https://$1"'); // 加载HTML并提取图片链接 const $ = cheerio.load(fixedHtml); const imgSources = $('.di-slider img').map((i, el) => $(el).attr('src')).get(); console.log('提取到的图片链接:', imgSources);
内容的提问来源于stack exchange,提问作者StavenCross
相关产品推荐
相关产品推荐

