5:31Better Stack
Log in to leave a comment
No posts yet
如果只是将网页的 HTML 简单地抓取为纯文本,AI 智能体(Agent)将会迷失方向。虽然文本可见,但文档的层级结构却消失了。根据 2024 年发布的对比研究数据,保留文档层级结构的方法比单纯切分文本的方法在检索准确度上提升了 30% 以上。我坚信,让智能体通过标题(Header)信息即刻掌握数据的主次权重是核心所在。
首先要做的是放弃 BeautifulSoup 的 get_text()。请改用 Markdownify 库将 HTML 标签映射为 Markdown 标题。应采用“父子分块(Parent-Child Chunking)”策略,将转换后的 Markdown 按标题单位进行切分,从而将整个上级章节作为上下文提供。配合使用 Trafilatura 库,可以在提取正文的同时将 Token 消耗量降低多达 67%。这是节省成本并提高准确性最可靠的方法。
通过 JavaScript 实现的标签菜单或折叠面板背后的数据,静态爬虫永远无法读取。我认为,这些不可见的数据是侵蚀 RAG 系统回答质量的主凶。Playwright 直接连接到浏览器标准协议 CDP,因此比 Selenium 更快、更强大地控制动态内容。从实际应用案例来看,实现自动点击序列的系统比手动采集获取的数据量多出 30%。
在构建基于 Playwright 的自动化逻辑时,请循环使用 page.wait_for_selector 功能。必须切实等待可点击元素出现在屏幕上。接着调用 scroll_into_view_if_needed() 方法强制触发无限滚动或 AJAX 请求。依次点击每个标签页,并实时捕获并保存变化的 DOM 状态。只有经过这个过程,才能构建出一个无数据遗漏的数据库。
广告、页脚和菜单栏会浪费智能体的上下文窗口(Context Window)并污染嵌入向量(Embedding Vector)。网站的噪点比想象中严重,未经清洗的数据对 AI 而言无异于毒药。Readability.js 通过分析文本和链接的密度,仅挑选出包含实际信息的正文。在基准测试结果中,Readability 在所有页面类型中记录了 0.970 的性能中位数,准确地去除了正文以外的元素。
请将该算法加入数据清洗流水线。将采集到的 HTML 放入 Readability.js 过滤出标题和正文,然后用正则表达式删除不必要的空格。将这样清洗后的文本转换为 Markdown 存储,智能体需要读取的数据量可减少 90%,检索相关性则提升 2.29 倍。与其强行塞入大量数据,不如输入洁净的数据,这样效率要高得多。
大多数网站会通过检查 navigator.webdriver 标志来阻止 AI 智能体的访问。如果你不想面对验证码(CAPTCHA)界面,隐身策略必不可少。机械的动作很快就会被识破。我认为,从数学层面模拟人类行为是最聪明的解决方案。
首先,使用 playwright-stealth 插件清除 WebDriver 标志,并将 User-Agent 伪装成最新的 Chrome 版本。移动鼠标时,不应使用直线,而应使用贝塞尔曲线(Bezier Curve):
打字时,也要在每个字符之间加入 50ms 到 200ms 之间的随机延迟。仅通过在翻页时随机休息 2 到 5 秒,就能避开反爬虫系统的监视。虽然看起来慢了一点,但这比被封禁而完全无法采集要快得多。