Axios+Cheerio提取网页Script数据后,如何获取指定字段值?
解决Cheerio提取script文本后无法访问属性的问题
你遇到的问题核心是:通过Cheerio提取到的script文本是JSON格式的字符串,并非JavaScript对象,所以直接用.访问属性会返回undefined。必须先把字符串解析为对象,才能正常访问其中的字段。
修正后的代码
const axios = require('axios'); const cheerio = require('cheerio') axios.get('https://www.pakwheels.com/used-cars/lahore/24858').then((res) => { const $ = cheerio.load(res.data) const scriptText = $('.classified-listing').first().children('script').text().trim(); try { // 优先尝试直接解析纯JSON字符串 const data = JSON.parse(scriptText); console.log(data.description); // 现在可正常访问description属性 } catch (error) { // 若解析失败,说明script内容可能带变量前缀(如"window.data = {...};") // 用正则提取{}包裹的JSON核心部分 const jsonMatch = scriptText.match(/\{[\s\S]*\}/); if (jsonMatch) { const data = JSON.parse(jsonMatch[0]); console.log(data.description); } else { console.error('无法从script中提取有效JSON数据'); } } })
关键说明
trim():去除文本前后的空白、换行符,避免因多余字符导致JSON解析失败try-catch:兼容两种常见的script格式——纯JSON字符串,或带变量赋值的JSON内容- 正则提取:针对非纯JSON的script内容,精准截取
{}内的有效JSON部分
内容的提问来源于stack exchange,提问作者Yousaf Zahid
相关产品推荐
相关产品推荐

