使用Fetch API
上一节介绍的Search
API已经具备了自动搜索网页、读取网页、生成内容摘要的功能。
如果你要读取特定的网页,可以用Fetch API。
之前我们已经介绍过一些读取特定网页内容的方法。
例如要抓取格式化的网页数据,可以参考: 抓取网页数据(爬虫)
抓取AJAX数据
例如要直接抓取网页源代码,代码也很简单:
Dim
hc
As
New
HttpClient("https://www.tianya.net/")
Dim
html
As
String
= hc.GetData()
Output.Show(html)
但HttpClient抓回来的是“给浏览器看”的代码,可能只有一堆 <div id="app"></div> 和
<script>,真实的数据根本不在源码里,而在后续的 AJAX 请求或 JS 渲染里,所以并不适合投喂给大模型。
例如你用 HttpClient 抓一个新闻网页,拿到的 HTML 源码里包含了:导航栏、侧边栏、页脚、广告脚本、评论区、大量无用的 <style> 和
<script> 标签。如果你把这几万字的乱码直接丢给大模型,不仅消耗海量 Token,还会让模型产生严重的幻觉(它会被无关的代码干扰)。
DeepSeek提供了一个网页抓取接口(Fetch API),用于抓取网页,官方说明地址:
https://api-docs.deepseek.com/zh-cn/api/fetch
DeepSeek Fetch 内部做了极其复杂的内容提取算法,它会帮你把导航、广告、侧边栏全部剔除,只留下核心的正文,并且自动转换成排版极佳的 Markdown
格式,适合投喂给大模型。
DeepSeek Fetch 在服务端使用的是无头浏览器(Headless Browser),它会执行
JavaScript,等网页完全渲染出来、数据加载完毕后,再把最终的内容提取下来,这是HttpClient做不到的。
上一节介绍的 Search API
是“广撒网”,本节介绍的 Fetch API 是“精阅读”。两者的配合,就能让大模型真正拥有“上网查资料”的能力。
示例
本节任务:基于DeepSeek的Fetch API,设计一个抓取网页的工具,让
大模型能够在需要时自动抓取指定网页的内容。
下面的是参考代码,可直接在命令窗口测试执行:
Dim
apiKey
As
String
=
"sk-a734b83536da45e9aedc3e42605bfb3a"
'请替换为自己的APIKey
Dim
caller
As
New
LLMCaller("https://api.deepseek.com/chat/completions",
"deepseek-flash",
apiKey)
caller.Messages =
New
JArray()
' 1. 定义工具
With
caller.AddTool("web_fetch",
"抓取指定网页的正文内容,以
Markdown
格式返回标题和正文。")
.AddParameter("url",
"string",
"要抓取的网页完整地址,必须以
http:// 或
https://
开头。",
True)
End
With
' 2.
实现工具执行逻辑
caller.ToolExecutor =
Function(ttoolName
As
String,
targs
As
JObject)
As
String
Select
Case
ttoolName
Case
"web_fetch"
Dim
targetUrl
As
String
= targs("url").ToString()
'
发起
Fetch 请求
Dim
hc
As
New
HttpClient("https://api.deepseek.com/v1/tools/fetch")
hc.SkipError =
True
hc.ContentType =
"application/json"
hc.Headers.Add("Authorization",
"Bearer "
& apiKey)
Dim
reqBody
As
JObject =
New
JObject()
From
{{"url",
targetUrl}}
hc.Content = reqBody.ToString()
Dim
res
As
String
= hc.GetData()
Dim
result
As
New
JObject()
If
hc.StatusCode <> 200
Then
result("title")
=
"抓取失败"
result("content")
=
"抓取失败,状态码:"
& hc.StatusCode &
",状态描述:"
& hc.StatusDescription
Else
'
解析结果
Dim
page
As
JObject = JsonConvert.DeserializeObject(res)
Dim
title
As
String
=
If(page("title")
IsNot
Nothing,
page("title").ToString(),
"")
Dim
content
As
String
=
If(page("content")
IsNot
Nothing,
page("content").ToString(),
"")
result("title")
= title
result("content")
= content
'如果担心网页内容过长,可以考虑截取,例如:content.Substring(0,30000)
End
If
Return
result.ToString()
Case
Else
Return
"未知工具:"
& ttoolName
End
Select
End
Function
' 3. 发起提问
caller.UserMessage =
"请帮我阅读这篇文章:https://finance.sina.com.cn/tech/roll/2026-10-23/doc-iniweiyw4833115.shtml,并总结出核心要点。"
If
caller.GetResult()
Then
MessageBoxA.Show(caller.Result)
Else
MessageBoxA.Show(caller.Error)
End
If