
先说个最近的真实感受:我手上的几个 AI 小工具,最烦的不是模型笨,而是喂给它的网页太脏。抓下来的 HTML 里全是导航、弹窗、广告位、脚本,大模型读半天读不到重点,token 哗哗地烧。
后来看到一个挺实用的思路:别把整个网页丢给模型,先抓下来,洗干净,转成 Markdown,再让它回答你的问题。输出干净,token 也省。我照着搭了一个,半小时搞定,今天分享给同样在折腾 AI 爬虫的朋友。
准备工作:装几个库就行
用 Jupyter Notebook 跑最顺手,每步都能看到中间结果。先装依赖:
requests(抓网页)、beautifulsoup4(清洗 HTML)、markdownify(HTML 转 Markdown)、openai(调大模型)、ftfy(修复乱码文本)、python-dotenv(安全加载 API Key)。一条 pip 命令全搞定。
第一步:把网页抓下来
写个 fetch_page 函数,核心就三件事:带上 User-Agent(不然很多网站直接拒你)、设个 15 秒超时(防止网站不响应时无限等)、用 raise_for_status 让请求失败时立刻报错(404、500 一眼就能看到)。
实测抓了一个国外网站的首页,打印前 500 个字符,那叫一个乱——标签、脚本、布局代码全混在一起。但没关系,下一步就是给它「洗澡」。
第二步:清洗 HTML,这是省 token 的关键
清洗逻辑分两层。第一层,把 script、style、noscript、svg、img、iframe、nav、header、footer、form、button 这些标签直接拆掉——它们对回答问题基本没用,纯纯浪费 token。
第二层更有意思:按 class 名和 id 名过滤。很多网站的弹窗、导航、订阅框、cookie 提示,class 里都带 popup、modal、cookie、newsletter、navbar 这类关键词,写个名单,挨个匹配,匹配上的就拆。我试了一下,清洗完的页面干净得像个素颜美女,剩下的全是正文。
对了,清洗前先用 ftfy 的 fix_text 处理一遍乱码,有些网站的编码问题会导致后面 Markdown 转换出幺蛾子。
第三步:HTML 转 Markdown
这一步用 markdownify 一行搞定。为什么要转?因为 Markdown 比原始 HTML 更紧凑,去掉了多余的格式标签、空行、重复内容,喂给模型的时候输入 token 能少不少。
我拿同一篇文章对比过,原始 HTML 有 30 多 KB,转完 Markdown 只剩不到 10KB,大模型的输入成本直接砍掉一大截。日积月累,这省下来的都是钱。
第四步:让大模型回答问题
最后一步就轻松了,把清洗后的 Markdown 内容加上用户的问题一起发给模型。模型只读有用内容,回答自然又准又聚焦,不会把整页内容原样吐给你。
模型我选的是个小尺寸的,这种「读页面回答问题」的任务用不着大推理模型,杀鸡不用牛刀。当然,想用哪个模型看你自己,OpenAI 账号里有什么用什么。
几点使用心得
这套流程跑通之后,我又给它加了个小改造:把清洗规则做成了可配置的列表,不同网站不同噪音词直接往名单里加,适配起来很快。
还有个坑提醒一下:有些网站的内容是 JS 动态渲染的,requests 抓下来是空的,这时候得换 Playwright 之类的无头浏览器,或者找网站的 API 接口。我这个方案适合静态页面,动态页面得另想办法。
总的来说,这套「抓取→清洗→转 Markdown→LLM 问答」的链路,做 AI 搜索、知识库问答、舆情监控都够用。代码量不大,但每一步都在实打实地省钱省时间。有兴趣的可以照着搭一个,有问题评论区聊。
评论 (0)
暂无评论,来写第一条吧 ✍️