crawl4ai真实数据结构,raw_markdown
的正确路径是:
item.json.results[0].markdown_v2.raw_markdown
我们来分解一下这个正确的路径:
item
:这是 n8n 传给 Code 节点的单个数据项,它的顶层就有一个叫"json"
的对象。.json
:进入这个"json"
对象。.results
:在"json"
对象内部,找到"results"
字段,它是一个数组[ ... ]
。[0]
:从这个数组中,取出第一个元素(因为编号从0开始)。.markdown_v2
:在这个元素对象中,找到"markdown_v2"
字段。.raw_markdown
:最后,从"markdown_v2"
对象中,取出我们最终需要的"raw_markdown"
文本。
你之前的尝试都非常接近,只是因为 crawl4ai
的输出实际上被包裹在了另一层 json
对象里,这是我们之前无法预料到的。你通过 console.log
把它找了出来,这正是最专业的调试方法!
最终的 n8n Code 节点代码
现在,请将你的 Code 节点代码完整替换为下面这个最终正确版本。它使用了正确的路径,并且依然保持了“健壮性”,可以防止因为未来可能的抓取失败而导致工作流崩溃。
JavaScript
// 获取上一个节点传入的所有数据项
const items = $input.all();
// 遍历每一个数据项进行处理
for (const item of items) {
// 使用我们最终确定的正确路径来安全地访问数据
let text = item.json?.results?.[0]?.markdown_v2?.raw_markdown;
if (text) {
// --- 最终清理流程 ---
// 1. 【关键新增步骤】将字符串 "\\n" 替换为真正的换行符 \n
// 这是解决你看到 `\n` 而不换行的核心
text = text.replaceAll('\\n', '\n');
// 2. 定义一个更全面的“垃圾内容”关键词黑名单
const junkKeywords = [
'分类', '图像来源', '图像加注文字', '补充报导:BBC国际部',
'Article Information', 'Author,', 'Role,', '热读', 'End of 热读',
'更多相关内容', '热门内容', '特别推荐', 'BBC值得信赖的原因', '© 2025 BBC'
];
// 3. 先用更强的正则表达式,移除所有图片和链接的 Markdown 标记
text = text.replace(/(!?\[[\s\S]*?\]\([\s\S]*?\))+/g, '');
// 4. 【核心改进】按行处理,用更严格的规则过滤
const lines = text.split('\n');
const cleanedLines = lines
.map(line => line.trim()) // 去除每行首尾的空格
.filter(line => {
// 规则a: 过滤掉空行
if (line.length === 0) return false;
// 规则b: 过滤掉无意义的符号行
if (line === '*' || line === '###') return false;
// 规则c: 过滤掉类似 "1. 1" 或 "10. 10" 这样的错误行
if (/^\d+\.\s\d+$/.test(line)) return false;
// 规则d: 过滤掉看起来像单独日期的行
if (/^\d{4}年\d{1,2}月\d{1,2}日$/.test(line) || /^\d+\s小时前$/.test(line)) return false;
// 规则e: 如果行内包含任何一个黑名单关键词,就过滤掉它
if (junkKeywords.some(keyword => line.includes(keyword))) return false;
return true; // 保留所有“干净”的行
});
// 5. 将干净的行重新组合,并整理段落格式
let cleanedText = cleanedLines.join('\n');
cleanedText = cleanedText.replace(/\n{3,}/g, '\n\n');
// --- 清理流程结束 ---
item.json.cleaned_markdown = cleanedText.trim();
} else {
item.json.cleaned_markdown = "处理失败:未能在指定的路径中找到内容。";
}
}
// 返回被修改后的数据项
return items;