从这一节开始,Hermes 要走出去,走进一个全新的领地:网页。
网页上有信息。而把网页上的信息变成自己能用的数据,是大多数人与浏览器打交道的第一需求。
这条路怎么走?先看两条完全不同的路线图——传统爬虫和 AI Agent,然后理解 Hermes 为什么选了后者的方式。
4.1 拿网页数据的两条路
把网页上的信息变成本地数据,这件事已经做了二十几年。过去只有一条路,现在有了第二条。
第一条路:爬虫
+------------------------------------------------------------
| 传统爬虫的数据流
|
| 请求 HTML → 解析 DOM → 写选择器 → 抽字段 → 导出
|
| 示例:
| resp = requests.get(url)
| soup = BeautifulSoup(resp.text, 'html.parser')
| title = soup.select('.book-title')[0].text
| score = soup.select('.rating')[0].text
+------------------------------------------------------------
这条路程序员最熟悉。流程线性、速度快、成本低。但有两个问题让它现在不再是第一选择:
- 页面不再是一张静态 HTML。现在大多数网站是 SPA(单页应用程序),即真正的数据由 JavaScript 在浏览器里异步拉回来再渲染。所以,
requests.get()拿到的是个空壳,里面没有数据。要解决这个问题,必须上 Puppeteer / Playwright 这种 headless browser,让 JavaScript 跑完再抓 DOM。
指没有图形界面的浏览器。它能像正常浏览器一样加载网页、执行 JavaScript、渲染 DOM,但没有窗口、看不到页面——全程在后台命令行里跑。Puppeteer 和 Playwright 都是这类浏览器。
- 选择器天然脆弱。写脚本时
div.book-title能取到标题,三个月后页面改版,class 换成BookInfo_title__3a7f,脚本就无效了。
偶尔改动一次还能接受,但面对每周都在变的现代前端,人工维护成本会吃掉自动化的全部收益。
这两个限制叠加在一起,让传统爬虫的适用范围越来越窄——高频、稳定的页面(内部系统、固定格式报表)用它划算;动态、频繁改版、一次性的页面,写脚本的性价比就差了很多。
第二条路:AI Agent
Hermes 默认不用第一种方案。它不是靠「请求 HTML → 写死选择器」这条流水线,而是换了一种方式抓取内容:
+------------------------------------------------------------
| Hermes 的数据流
|
| 人用自然语言说「我要抓取 XX 页面的作者和评分」
| → Hermes 打开页面 → 获取无障碍树快照
| → 无障碍树把页面结构翻译成文本:
| 每个元素有角色(heading / link / button)、
| 名称和引用标记(@e1, @e2)
| → LLM 读文本就能理解页面、定位字段
| → 清洗 → 导出
+------------------------------------------------------------
核心差别在中间两步。传统爬虫靠的是选择器——人提前扒 HTML 源码、把 class 写死在代码里。但 Hermes 默认的方式不是这样。
那么 Hermes 或者现在绝大多数的 AI Agent 是怎么处理这个问题的?
它们靠的是无障碍树(accessibility tree),即浏览器把页面结构翻译成一份带角色标注的文本描述。LLM 读文本就能认出「这个 heading 是书名、那个 text 是评分」,不需要写任何选择器,也不需要视觉模型(所以即使是 DeepSeek 也能识别出元素)。
无障碍树(accessibility tree)最早是给屏幕阅读器用的,主要服务于视障用户。屏幕阅读器「读」网页,需要知道页面上每个元素是什么(按钮?标题?链接?),于是浏览器在渲染页面时,会额外生成一份带角色标注的结构化描述,通过操作系统无障碍 API 提供给屏幕阅读器。
所有主流浏览器(Chrome、Firefox、Safari、Edge)都支持这一机制。W3C 还专门为它定了一套标准叫 ARIA(Accessible Rich Internet Applications),全球浏览器支持率超过 88%。
发展到今天,无障碍树已经不只为视障人士服务了。因为它能给出页面最干净的「骨架」——角色(heading / link / button / text)、可见文本、引用标记(@e1、@e2)——Hermes 这类 AI Agent 也用它来「读」网页。LLM 拿到这份文本后,不需要看图就能理解页面结构。
这个做法有两个好处:
- 不用预先了解页面结构、也不用写死选择器。传统做法是人提前打开页面、扒一遍 HTML、把规则写成脚本;但 Hermes 的原理和这个不同。
- 不受页面改版影响。class 换了一套新的没关系——Hermes 下一轮打开页面,重新看一眼、重新借助大模型去寻找需要的信息,不需要人改任何代码。
这种方式的代价当然有:比直接爬 HTML 慢、更耗 token、稳定性不够好。
所以需要具体的问题具体分析: - 高频稳定的页面传统爬虫更快更省; - 临时、模糊、经常变动的页面交给 Hermes 更划算。
4.2 ■ 学点英语
| 中文 | English | 音标 | 说明 |
|---|---|---|---|
| 网页抓取 | Web Scraping | /web ˈskreɪpɪŋ/ | 从网页中自动提取信息的技术 |
| 结构化数据 | Structured Data | /ˈstrʌktʃərd ˈdeɪtə/ | 按字段、表格或对象组织起来的数据 |
| 字段映射 | Field Mapping | /fiːld ˈmæpɪŋ/ | 把页面信息对应到结构化字段的关系 |
| 解析规则 | Parsing Rule | /ˈpɑːrsɪŋ ruːl/ | 从原始文本或 HTML 中抽取数据的规则 |