从 Regex 到 LLM:我的网页数据提取之旅

我开发了一个价格比较工具。我需要从数十个电商网站中抓取产品数据。每个网站的结构都不同。有些网站使用随机的 CSS 类,有些则使用 JavaScript 来加载内容。

我首先尝试了传统的方法。我使用了 Regex 和 BeautifulSoup。

这在两个网站上奏效了。但随后,其中一个网站更改了布局,我的代码就失效了。另一个网站则使用了动态内容。我花在修复爬虫上的时间比使用数据的时间还要多。

然后我尝试了 AI。我将原始 HTML 输入到 LLM 中。

结果并不理想。输出不一致:有时得到的是 JSON,有时得到的是段落。模型还会产生幻觉(hallucinate)数据。由于发送了过多的 token,成本也变得非常高。

我找到了一个折中方案。现在我采用的是一种混合方法。

以下是我的流程:

  • 预处理 HTML。我会剥离 scripts、styles 和导航栏。我只保留可见文本。这可以减少 token 数量并降低成本。
  • 使用 JSON mode 或 function calling。这可以强制 LLM 返回结构化数据。
  • 使用重试逻辑。如果 JSON 格式错误,代码会重新尝试。
  • 缓存结果。我会按 URL 保存成功的提取结果,以避免为同一个页面支付两次费用。

对于静态且结构良好的网站,Regex 和 BeautifulSoup 仍然是最佳选择。它们既快速又免费。

对于混乱、不可预测的网站,LLM 表现更好。但你必须先清洗数据,以保持较低的成本。

我的经验教训:

  • 监控你的成本和成功率。
  • 注意延迟。LLM 调用需要几秒钟,而不是毫秒。
  • 验证输出。检查价格看起来是否像真实的价格。
  • 使用混合系统。对简单的网站使用 parser,对混乱的网站使用 LLM。

这套方案为我节省了大量工作时间。我可以在不到一小时内添加一家新商店。

你是如何处理混乱的网页数据的?你更倾向于使用 parser 还是 LLM?

Source: https://dev.to/__c1b9e06dc90a7e0a676b/from-regex-to-llms-my-journey-extracting-unstructured-web-data-5gmh

Optional learning community: https://t.me/GyaanSetuAi