/** * 探针脚本(第五轮):带 Referer 重试中证官网 xls(含 市盈率1/市盈率2 双口径) * 用法:node dev_test_scripts/debug/debug_dip_eval_sources5.js */ const axios = require('axios') const iconv = require('iconv-lite') const UA = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0 Safari/537.36', 'Referer': 'https://www.csindex.com.cn/' } const tryXls = async (url, label) => { try { const res = await axios.get(url, { timeout: 25000, responseType: 'arraybuffer', headers: UA, validateStatus: () => true }) const buf = Buffer.from(res.data) if (res.status >= 400) return console.log(`[${label}] status=${res.status} bytes=${buf.length}`) const text = iconv.decode(buf, 'gb18030') console.log(`[${label}] status=${res.status} bytes=${buf.length}`) const idx = text.indexOf('市盈率') if (idx >= 0) { const clean = s => s.replace(/[^\x20-\x7E\u4e00-\u9fff,。.·\-\/]/g, ' ').replace(/\s+/g, ' ') console.log(` 表头: ${clean(text.slice(Math.max(0, idx - 80), idx + 140))}`) // 数据行通常以日期开头,取含“日期格式”的最后几行 const lines = text.split(/[^\x20-\x7E\u4e00-\u9fff,。.·\-\/\t]{3,}/).filter(l => /\d{4}[\/-]\d{1,2}[\/-]\d{1,2}/.test(l)) if (lines.length) { console.log(` 最新行: ${clean(lines[lines.length - 1]).slice(0, 320)}`) console.log(` 次新行: ${clean(lines[lines.length - 2] || '').slice(0, 320)}`) } } else { console.log(` 未找到“市盈率”,magic=${buf.slice(0, 8).toString('hex')}`) } } catch (e) { console.log(`[${label}] 异常: ${e.message}`) } } ;(async () => { await tryXls('https://csi-web-dev.oss-cn-shanghai-finance-1-pub.aliyuncs.com/static/html/csindex/public/uploads/file/autofile/perf/000905perf.xls', 'oss-xls-000905') await tryXls('https://www.csindex.com.cn/uploads/file/autofile/perf/000905perf.xls', 'www-xls-000905') await tryXls('https://www.csindex.com.cn/csindex-home/exportExcel/downloadIndexHistoryExcel?indexCode=000905', 'history-xls-000905') })()