如果你曾经将抓取的网页直接输入语言模型,你已经知道问题所在:页面大部分都是噪音。导航菜单、Cookie 提示横幅、内联脚本、追踪像素和布局包装层,都和你真正关心的几段文字一起被喂给模型。模型消耗了大量 token 来阅读它永远用不到的标签,而额外的杂乱内容也使检索和摘要的质量下降。

本指南展示一条更清晰的路径。Crawling API 可以将页面以整洁的 Markdown 而非原始 HTML 的形式返回,这样你交给模型的是可读文本,而非一锅标签汤。我们将介绍如何请求 Markdown 输出、为何 Markdown 在 LLM 和 RAG 的 token 预算上优于 HTML,以及一个小型端到端管道:获取 Markdown,分块,然后嵌入或提示。贯穿全文需要记住的短语是 llm ready markdown web scraping,因为输出格式正是让你后续技术栈变得更简单的关键所在。

为何 Markdown 对 LLM 优于原始 HTML

HTML 是为在浏览器中渲染页面而构建的。它携带布局引擎所需的一切:嵌套的 div、类名、内联样式、脚本和 ARIA 属性。模型几乎不需要这些。当原始 HTML 进入 LLM 工作流时,模型必须在到达真正内容之前跋涉过大量标签和样板文本,而这带来真实的代价。

Markdown 保留了重要的结构,去掉了其余部分。标题依然是标题,列表依然是列表,表格依然清晰可读,链接依然有用,而不会被埋没在属性之中。实际收益清晰可见:

  • Token 预算。一个典型的文章页面,在去除菜单、脚本和包装层后,原始 HTML 可能是其 Markdown 等价版本的数倍大小。更少的 token 意味着更低的每次调用成本,以及模型上下文窗口中更多的空间留给真正有用的内容。
  • 准确性。读取干净文本的模型比解析一堵 div 的模型更不容易误抓一个游离的导航标签或 Cookie 同意字符串。输入噪音越少,输出错误结论越少。
  • 分块。Markdown 标题提供了自然的切分点。你可以在 ## 边界处分块,将语义相关的文本保持在一起,而不是在任意字符数处切断句子中间。
  • 可检查性。出了问题时,你可以打开 Markdown 文件直接阅读。调试一个 200 KB 的 HTML 块则是另一种下午的体验。

对于从事 AI 网络抓取的团队来说,输出格式不是小细节,它决定了获取之后所有事情的质量上限。关于数据清洗如何影响模型结果的更宏观视角,请参阅如何为 AI 和机器学习整理和清洗网络抓取数据

如何从 Crawling API 请求 Markdown

Crawlbase 原生返回 Markdown。你不需要接入单独的 HTML 转 Markdown 转换器;只需告诉 Crawling API 你想要 Markdown,它就会在爬取过程中在服务端完成转换。

控制方式是单个参数。在请求中添加 format=md,API 就会返回 Markdown 而非 HTML。

bash
curl "https://api.crawlbase.com/?token=YOUR_TOKEN&url=https%3A%2F%2Fexample.com&format=md"

如果你只需要主要的可读内容,添加 md_readability=true。这会在转换前运行可读性提取,过滤掉菜单、侧边栏和页脚噪音,使 Markdown 主要包含文章正文。

bash
curl "https://api.crawlbase.com/?token=YOUR_TOKEN&url=https%3A%2F%2Fexample.com&format=md&md_readability=true"

两种模式各有用武之地。单独的 format=md 保留更广泛的页面上下文,例如导航和相关链接,在你需要绘制网站结构时很有用。添加 md_readability=true 则提供主内容提取,这正是你用于嵌入、摘要和 RAG 时所需要的。如果你的目标是向模型喂数据,从开启可读性开始。

Markdown 仍需要成功获取页面

Markdown 输出是对 API 成功加载内容的格式化。如果目标网站屏蔽了数据中心流量或用 JavaScript 渲染内容,你仍然需要 API 先突破这些防御。对客户端渲染页面,将 format=md 与 JavaScript token 配合使用,让 API 为受保护网站轮换 IP。空壳页面的干净 Markdown 依然是空壳。

在小型 RAG 管道中使用 Markdown 输出

检索增强生成(RAG)在模型回答之前赋予其访问外部知识的能力。系统先检索相关文本,再将该上下文传给模型,而非仅依赖训练数据。通常的形态是:获取内容,将其切分为块,将这些块嵌入向量存储,在查询时检索相关块,然后用它们提示模型。

该管道的质量在你调用模型之前很久就已决定。如果获取的页面充满重复的菜单、Cookie 横幅和无效链接,这些噪音会和有用文本一起被分块和索引,检索质量随之下降。干净的 Markdown 使每个块都有更大机会包含有意义的内容。以下是获取步骤,使用可读性参数确保每个文档主要是正文内容。

python
import requests

API = "https://api.crawlbase.com/"
TOKEN = "YOUR_TOKEN"

def fetch_markdown(url):
    params = {
        "token": TOKEN,
        "url": url,
        "format": "md",
        "md_readability": "true",
    }
    resp = requests.get(API, params=params, timeout=60)
    resp.raise_for_status()
    return resp.text

拿到 Markdown 后,将其切分为块。由于 Markdown 保留了标题,你可以在标题边界处切分,而非在任意字符数处盲目切割,这样每个块在主题上保持连贯。

python
import re

def chunk_by_heading(markdown, max_chars=1200):
    sections = re.split(r"(?=^#{1,3} )", markdown, flags=re.MULTILINE)
    chunks = []
    for section in sections:
        text = section.strip()
        if not text:
            continue
        if len(text) <= max_chars:
            chunks.append(text)
        else:
            for i in range(0, len(text), max_chars):
                chunks.append(text[i : i + max_chars])
    return chunks

从这里开始,最后一步就是你的技术栈本来要做的事:将每个块嵌入向量数据库以供检索,或者快速测试时直接将块放入提示。重点在于输入现在是干净的文本,所以嵌入和提示步骤继承了这种干净性。

python
url = "https://example.com/some-article"
markdown = fetch_markdown(url)
chunks = chunk_by_heading(markdown)

# Send the most relevant chunks as context to your model
context = "\n\n".join(chunks[:3])
prompt = f"Answer using only this context:\n\n{context}\n\nQ: ..."
print(len(chunks), "chunks ready for embedding or prompting")

如果你想深入了解检索和建模方面的内容,AI 数据提取的工作原理介绍了干净输入如何贯穿模型输出的全过程。

Crawlbase Crawling API

完全跳过 HTML 转 Markdown 的清洗步骤。在请求中添加 format=md,Crawling API 就会在可信 IP 后渲染页面,在服务端完成转换,并返回整洁的 Markdown,随时可以分块和嵌入。添加 md_readability=true 则过滤掉所有非主内容。在免费套餐上用你自己的 URL 试试。

清洗步骤曾经消耗你什么

没有原生 Markdown 输出时,常见的模式是一条脆弱的预处理链:获取 HTML,解析 DOM,去除脚本和样式,移除导航,找到文章正文,规范化空白字符,然后转换为 Markdown,此后才能分块和嵌入。这条链上的每个环节都可能失效。

网站重新设计可以在一夜之间破坏你的正文提取选择器。一个新的 Cookie 横幅可能渗入你提取的文本中。针对一个页面模板调优的解析器可能悄无声息地破坏另一个模板。结果是工程师将时间花在维护清洗逻辑上,而非改善检索质量、提示词或产品本身。

将 Markdown 的返回点移近爬取过程,将这条链压缩为一步。工作流变成:获取 Markdown,验证响应,分块,嵌入。更少的活动部件意味着更少的静默故障,以及更多时间花在真正推动系统进步的部分。如果你在多个网站上运行这一流程,简化单次获取的逻辑会随规模成倍放大,这正是大规模网络抓取所关注的重点。

在索引之前验证响应

有一个习惯会让你受益颇丰:在摄入时检查响应,在错误数据进入向量存储之前将其拦截。重定向、超时或返回内容极少的页面应尽早捕获,因为今天索引的弱块,下周就会变成错误答案。

python
def is_usable(markdown, min_chars=200):
    if markdown is None:
        return False
    stripped = markdown.strip()
    # Reject empty shells and near-empty error pages
    return len(stripped) >= min_chars

md = fetch_markdown(url)
if not is_usable(md):
    print("Skipping: thin or empty response")
else:
    chunks = chunk_by_heading(md)
    # proceed to embed / index

这是一个小小的护栏,但正是它区分了一个保持可信的检索系统与一个逐渐被垃圾填满的系统。更干净的源内容加上一个基本的健全性检查,使你的 RAG 管道网络数据从第一个请求起就保持诚实。

LLM 就绪 Markdown 最适合的场景

Markdown 输出在任何网络内容需要转化为模型可用上下文的场景中都能发挥价值:

  • 文档聊天机器人。将帮助中心和产品文档页面转化为干净的 Markdown 块用于搜索和检索,并通过定期重新爬取保持内容最新。
  • AI 研究代理。以模型能快速阅读的格式获取文章、报告和公开文件,无需代理为标签消耗预算。
  • 竞品和市场监控。以可读文本追踪定价页面、功能页面和更新日志,而非在每次运行时重新解析原始 HTML。
  • 内部搜索。在来自全网的更干净源材料上构建可搜索的知识索引。
  • 摘要管道。以少得多的预处理将长页面压缩为简洁摘要。

代理尤其受益。当工具返回经过可读性过滤的 Markdown 而非原始 HTML 时,模型从一开始就得到了接近可用文档的内容。这使摘要、字段提取、来源比较和决定下一步行动都变得更容易,从而往往产生更清晰的代理循环。如果你在通过轮换 IP 路由代理流量,什么是 AI 代理解释了该层如何与 Smart AI ProxyWeb MCP 服务器等工具配合。而当目标是结构化字段而非文本段落时,Crawling API 会返回解析好的 JSON。

保持爬取不被封锁

干净的输出只有在你能获取到页面的前提下才有价值。最值得为 AI 上下文抓取的网站,往往也是最积极防御机器人的网站,因此获取步骤需要在处理格式的同时也处理封锁问题。通过 Crawling API 路由意味着 IP 轮换和渲染在服务端处理,但更广泛的习惯依然适用:控制请求节奏,多样化目标,将状态码读作信号。完整的操作手册请参阅如何不被封锁地抓取网站

回顾

核心要点

  • Markdown 是模型的正确形态。它保留了标题、列表和表格,同时去掉了浪费 token 并干扰检索的标签。
  • 一个参数切换格式。在 Crawling API 请求中添加 format=md;添加 md_readability=true 则只提取主要内容。
  • 更干净的输入提升整个管道。更好的块带来更好的嵌入和更相关的检索,一切都在调用模型之前就已决定。
  • 服务端转换去掉了一条脆弱的链路。获取 Markdown,验证,分块,嵌入,而不是自行维护 DOM 剥离和 HTML 转 Markdown 逻辑。
  • 摄入时验证。一个简单的长度检查,能在空壳和错误页面污染你的索引之前将其拦截。
  • Markdown 仍然需要成功获取页面。将该格式与 JS token 和 IP 轮换配合使用,确保 API 首先加载到真实内容。

常见问题

什么是 LLM 就绪 Markdown 网络抓取?

它是指以语言模型可以立即使用、几乎无需清洗的格式采集网络内容。输出不是充满脚本、样式和导航的原始 HTML,而是易于分块、嵌入、摘要和放入提示的干净结构化 Markdown。使用 Crawlbase 时,在 Crawling API 请求中添加 format=md 即可获得。

如何从 Crawlbase Crawling API 获取 Markdown 输出?

在请求中添加 format=md,API 就会返回 Markdown 而非 HTML。如果你还想在转换前进行主内容提取,添加 md_readability=true,它会去除菜单、侧边栏和页脚噪音,使 Markdown 主要是文章正文。两个参数都是标准请求的一部分,无需额外设置。

为什么 Markdown 对 RAG 管道优于 HTML?

Markdown 保留了有用的结构,例如标题、列表、链接和表格,同时去掉了周围的标签。这产生了更干净的块、更精准的嵌入和更相关的检索,而嘈杂的原始 HTML 中,样板文本会和真实内容一起被索引,拖低回答质量。

Markdown 输出能减少 LLM 的 token 用量吗?

可以。去除脚本、样式和布局包装层,尤其是启用可读性后,使相同页面在 token 方面小得多。这降低了每次调用的成本,并在模型的上下文窗口中为真正重要的内容留出更多空间,而不是浪费在模型本来需要阅读和丢弃的标签上。

我能否仍然获取完整的页面上下文而非只是主文章?

可以。单独使用 format=md,不添加 md_readability=true。普通 Markdown 保留更广泛的页面上下文,例如导航和相关链接,这对网站结构分析很有用。只有当你想隔离主内容用于嵌入、摘要或提示时,才开启可读性。

从动态页面获取 Markdown 需要 JavaScript token 吗?

如果目标页面在客户端渲染其内容,是的。Markdown 格式化是对 API 加载内容的处理,因此对于 JavaScript 渲染的页面,需要传入 JS token 让页面先在真实浏览器中渲染,再请求 format=md。对于静态页面,普通 token 就足够了。

开始构建

大规模爬取任何站点,无需与基础设施对抗。

Crawlbase 负责处理代理、指纹和 CAPTCHA,让你的团队专注于交付数据流水线,而非维护爬取管道。1,000 次请求免费,无需信用卡。

自助开通 · 无需销售通话 · 提供企业级爬取量