AI网络抓取:LLM提取、Prompt-to-JSON与成本
LLM提取通过简单的英语提示将任何页面转换为干净的JSON——无需维护选择器。但模型无法抓取页面,原始HTML会快速消耗tokens。以下是正确的做法。
AI网络抓取意味着将语言模型指向页面,并用简单的英语请求你想要的字段作为JSON返回——无需编写CSS选择器,当布局变化时也无需维护解析器。这对于混乱、多样或一次性提取来说确实具有变革性。但它也常被误解,这就是为什么人们最终为抓取几百个页面付费却得到幻觉数据。两个事实解决了大部分困惑:语言模型无法抓取网页——它只能对你提供的文本进行推理——而将原始HTML输入模型是最快消耗token预算的方式。本指南涵盖了有效的提取模式,何时优于选择器,以及如何控制成本和幻觉。
没人说的事情:模型无法抓取
AI抓取的难点不在于AI。聊天机器人无法可靠地加载实时页面——它需要一个专用引擎先抓取HTML,然后对你提供的文本进行推理。因此,LLM提取管道实际上是一个在末端附加了智能解析器的抓取管道,而抓取部分是问题所在:机器人管理、JavaScript渲染、IP封锁。通过代理和渲染层解决抓取问题,提取就变得简单了。获取页面的干净方式是使用一个scraper API,它处理轮换和渲染并返回markdown,正如下一节所示,这也是模型最便宜的输入:
import requests
def fetch_markdown(url, api_key):
r = requests.get(
"https://api.quantumproxies.io/scrape",
params={"url": url, "render": "auto", "output": "markdown"},
headers={"Authorization": f"Bearer {api_key}"},
timeout=(5, 40),
)
r.raise_for_status()
return r.json()["markdown"] # nav/ads stripped, ready for the model
为什么是markdown而不是HTML是实际的成本杠杆
AI抓取成本的最大驱动因素是你通过模型推送了多少tokens,而原始HTML大多是你不需要的tokens:内联样式、脚本标签、跟踪属性、导航、页脚。在提取前将页面转换为干净的markdown——或仅提取主要内容——你通常可以将输入大小减少一个数量级,从而以同样的比例降低成本,并且作为额外的好处,减少幻觉,因为模型看到的是内容而不是页面装饰。这就是为什么markdown优先是为模型提供输入的标准,这与为LLMs提供新鲜网页数据的原则相同。如果你从这篇文章中只学到一件事:永远不要将原始页面源代码发送给模型。

使用schema的Prompt-to-JSON
一旦你有了干净的文本,提取就是一个简单的调用:描述你想要的字段,传递一个schema以便输出结构化,并指示模型在字段缺失时返回null而不是虚构。一个提取API将抓取、清理和提取合并为一个请求,因此你可以完全跳过管道:
curl -X POST "https://api.quantumproxies.io/extract" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/product/xyz",
"schema": {
"title": "string",
"price": "number",
"in_stock": "boolean",
"rating": "number|null"
},
"prompt": "Extract the product. Use null for anything not present."
}'
schema有双重作用:它为下游代码强制一个可预测的形状,并限制模型,这是防止虚构字段的第一道防线。根据相同的schema验证响应,并拒绝任何不符合的内容——虚构的价格比缺失的价格更糟糕。
def validate(record, schema):
for field, kind in schema.items():
v = record.get(field)
if v is None and "null" not in kind:
raise ValueError(f"missing required field: {field}")
return record # only trust records that satisfy the schema
何时LLM提取优于CSS选择器——何时不优
AI提取不是一个普遍的升级;它是一个不同的工具,具有不同的成本曲线。当工作多样或不稳定时使用它——抓取一千个布局不同的网站,一个不断重新设计的网站,像评论或列表这样的非结构化内容没有干净的选择器,或一次性工作不值得编写选择器。当你在高容量稳定网站上工作时,坚持使用CSS或XPath选择器:选择器是确定性的,每页几乎免费,并且从不产生幻觉。成熟的模式是混合的——选择器用于高容量核心目标,LLM提取用于长尾和不断变化的网站。
成本纪律将其从实验转变为生产。除了markdown优先,积极缓存以避免重新提取未更改的页面,匹配模型大小与任务难度——小模型可以很好地处理简单字段提取——并在API允许的情况下批量处理。渲染是其自身的项目;只有在页面真正需要JavaScript时才渲染,这一决策我们在何时必须渲染中量化。获取空白页面而不是内容,通常的修复是渲染,这在空白页面,缺失数据中涵盖。
关于免费和开源路线的一句话,因为这是大多数人首先搜索的。开源提取库非常适合学习模式和小型工作,但它们将你带回本文开头的两个难题:你仍然需要在机器人管理后抓取页面,并且你仍然需要支付执行提取的模型费用。“免费”通常意味着免费代码加上你自己的代理和token费用。这对于业余项目或概念验证来说是一个不错的交易;在生产量级上,抓取层的维护正是团队最终外包的内容,这是我们在自建抓取堆栈与scraper API中所述的构建与购买的选择。

常见问题
ChatGPT可以抓取网站吗?
不能单独完成。语言模型无法可靠地抓取和渲染实时页面——它对你提供的文本进行推理。要使用AI进行抓取,你需要将一个专用的抓取引擎(抓取并清理页面)与模型配对,模型从结果中提取结构化数据。抓取引擎处理代理、渲染和阻止;模型负责将内容转换为JSON。
如何降低AI网络抓取的成本?
在发送任何内容给模型之前,将页面转换为markdown或提取主要内容——原始HTML可能是相同信息的十倍tokens。然后缓存未更改的页面,使用较小的模型进行简单字段提取,仅在页面需要时渲染JavaScript,并批量处理请求。token量是主要成本,因此减少输入大小是最高杠杆的优化。
AI网络抓取会幻觉错误数据吗?
可能会,尤其是在输入嘈杂的原始HTML或请求页面上不存在的字段时。通过清理输入、传递明确的schema、指示模型在值缺失时返回null以及在信任之前根据该schema验证每个响应来防止这种情况。缺失的字段可以重试;自信地虚构的字段会默默地破坏你的数据集。
LLM提取比CSS选择器更好吗?
这取决于工作。LLM提取在布局变化频繁或编写选择器不值得时胜出,因为它不需要选择器并能适应重新设计。CSS选择器在单一稳定网站上高容量时胜出:它们是确定性的,每页成本更低。大多数生产管道使用选择器作为核心目标,LLM提取用于长尾。
一旦你停止将模型视为抓取器,AI网络抓取就变得强大。通过代理干净地抓取,提供markdown而不是HTML,用schema限制输出,并将LLM提取保留给其灵活性值得其token成本的工作。这是流畅演示与每日运行管道之间的区别。