尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
DeepSeek V3 Web Crawler 实战指南:LLM 驱动的目标化网站爬取方案(FireCrawl 开源仓库示例)
网页爬虫后端AI 应用【免费下载链接】firecrawlThe web data API to search, scrape, and interact at scale. 项目地址https://gitcode.com/GitHub_Trending/fi/firecrawl点击查看免费下载本指南基于 FireCrawl 开源仓库中的examples/deepseek-v3-crawler示例讲解如何用 DeepSeek V3 大语言模型与 FireCrawl Python SDK 构建目标导向的网站爬虫先由 LLM 生成精准的搜索关键词再通过 Map 接口定位相关页面最后用 Scrape 接口抓取正文并由模型抽取结构化 JSON。读完本文你将掌握一个完整的LLM Map Scrape流水线实现并理解其底层 SDK 调用机制与可调优的工程细节。一、示例概览从爬全站到找答案传统的网站爬虫往往先爬下来再说浪费大量请求在无关页面上。deepseek-v3-crawler示例改变了这一思路它把 DeepSeek V3 当作大脑把 FireCrawl 的 Map 与 Scrape 当作手脚围绕用户给出的**目标objective**有方向地抓取信息。示例文档 README.md 描述的完整流程是用户输入一个网站 URL 和想要查找的信息目标DeepSeek V3 根据目标生成 12 个词的最佳搜索参数用该参数调用 FireCrawl 的Map功能找出网站中与目标相关的页面逐个Scrape最相关的页面用模型判断目标是否命中命中后输出结构化 JSON 结果。这种方式特别适合从某个站点提取特定信息的场景例如从官网提取定价方案、从文档站收集 API 参数、从博客抓取某个主题的文章等。二、环境准备与前置条件按照文档要求运行该示例需要满足Python 3.8FireCrawl API Key云服务在https://api.firecrawl.dev签发一个可访问 DeepSeek V3 推理 API 的密钥。2.1 关于 LLM 接入方式的说明README 中描述的是Hugging Face Inference API但仓库内实际的脚本实现走的是OpenRouterbase_urlhttps://openrouter.ai/api/v1使用模型标识deepseek/deepseek-chat-v3-0324:free详见 deepseek-v3-crawler.py。也就是说当前仓库内以脚本源码为准README 的 Hugging Face 描述可以视为早期版本或写文档时的规划口径。因此实际运行时需要的是OpenRouter API Key脚本会通过环境变量OPENROUTER_API_KEY读取。requirements.txt中的huggingface-hub属于历史依赖当前脚本并未直接调用它。2.2 安装步骤文档给出了三步安装流程与实际仓库目录对应如下第 1 步克隆仓库并进入示例目录git clone repository-url cd examples/deepseek-v3-crawler第 2 步安装依赖包示例的依赖清单在 requirements.txtpip install -r requirements.txt依赖内容为firecrawl1.13.5 python-dotenv1.0.1 huggingface-hub0.20.0其中firecrawl1.13.5是 Python SDK 的固定版本提供FirecrawlApp客户端python-dotenv用于从.env文件加载环境变量。第 3 步创建.env文件存放密钥在示例目录脚本通过load_dotenv()从当前工作目录加载创建.envFIRECRAWL_API_KEYyour_firecrawl_api_key OPENROUTER_API_KEYyour_openrouter_api_key这里与 README 略有出入README 写的是HUGGINGFACE_API_KEY而脚本 deepseek-v3-crawler.py 实际读取的是FIRECRAWL_API_KEY与OPENROUTER_API_KEY两个变量运行时以脚本为准。三、运行方式与交互流程在示例目录执行python deepseek-v3-crawler.py脚本启动后按顺序先测试 DeepSeek 模型连通性发送一条test消息失败则直接退出并打印错误详情——这是快速失败设计避免在模型不可用时白白消耗 Map/Scrape 配额提示输入Website要爬取的网站 URL提示输入Objective你想查找的信息目标。随后脚本自动进入三阶段流水线并用 ANSI 彩色输出区分阶段青色为状态、黄色为进行中、绿色为成功、红色为错误。文档给出的示例输入/输出对输入网站https://www.example.com目标 Find information about their pricing plans输出包含该网站定价信息的结构化 JSON。四、核心代码逐段解析脚本体量不大但结构清晰全部代码在 deepseek-v3-crawler.py。下面按函数拆解。4.1 初始化Firecrawl 客户端与 LLM 客户端app FirecrawlApp(api_keyfirecrawl_api_key) client OpenAI( base_urlhttps://openrouter.ai/api/v1, api_keyopenrouter_api_key )FirecrawlApp由 Python SDK 导出见 apps/python-sdk/firecrawl/init.py。从 SDK 源码看V1FirecrawlApp的构造函数会优先使用显式传入的api_key否则读取环境变量FIRECRAWL_API_KEY并在未提供密钥且指向云服务时抛出ValueError(No API key provided)见 apps/python-sdk/firecrawl/v1/client.py。这意味着.env中的FIRECRAWL_API_KEY也可以不显式传入SDK 会自动读取。4.2 主流程 main()主函数 deepseek-v3-crawler.py 的逻辑用client.chat.completions.create发送测试请求若异常则打印红色错误并return交互读取url与objective调用find_relevant_page_via_map得到相关页面列表无相关页面则退出否则调用find_objective_in_top_pages命中目标则用json.dumps(result, indent2)打印结果未命中则输出提示。4.3 find_relevant_page_via_map()LLM 生成搜索词 Map 定位页面这是整个方案的智能所在代码见 deepseek-v3-crawler.pymap_prompt f The map function generates a list of URLs from a website and it accepts a search parameter. Based on the objective of: {objective}, come up with a 1-2 word search parameter that will help us find the information we need. Only respond with 1-2 words nothing else. response client.chat.completions.create( modeldeepseek/deepseek-chat-v3-0324:free, messages[{role: user, content: map_prompt}] ) map_search_parameter response.choices[0].message.content.strip() map_website app.map_url(url, params{search: map_search_parameter}) links map_website.get(urls, []) or map_website.get(links, [])要点提示词约束输出格式要求模型只回答 12 个词不要输出其他内容这保证了map_search_parameter可直接作为 Map 的search参数Map 的 search 参数语义在 FireCrawl v1 中map_url的search用于对 URL 做关键词过滤详见下一节 SDK 源码模型生成的关键词越贴近目标返回的候选 URL 越相关响应字段兼容处理脚本同时兼容urls与links两种响应字段防止不同版本 API 返回结构差异导致崩溃。4.4 find_objective_in_top_pages()Scrape LLM 校验 JSON 抽取脚本只取 Map 结果的前 3 个链接逐一尝试代码见 deepseek-v3-crawler.pyfor link in pages[:3]: scrape_result app.scrape_url(link, params{formats: [markdown]}) check_prompt f Given the following scraped content and objective, determine if the objective is met. If it is, extract the relevant information in a simple JSON format. If the objective is not met, respond with exactly Objective not met. The JSON format should be: {{ found: true, data: {{ // extracted information here }} }} Important: Do not wrap the JSON in markdown code blocks. Just return the raw JSON. Objective: {objective} Scraped content: {scrape_result[markdown]} 这段代码有三处值得注意的工程细节只爬前 3 页pages[:3]限制抓取量控制成本与延迟Map 已按相关性排序因此前 3 个通常命中率最高双重校验提示词system 消息要求模型始终以合法 JSON 回复、不要用 markdown 代码块包裹user 消息则要求未命中时精确返回Objective not met形成命中输出 JSON / 未命中输出标记的清晰协议防御式 JSON 解析即便提示词要求不包裹代码块模型仍可能输出json ...因此脚本做了清理——result.split()[1]去掉代码块围栏、去掉json前缀再json.loads解析失败则打印原始响应并继续下一个链接。解析成功后校验parsed_result.get(found)是否为真为真则返回parsed_result.get(data)作为最终抽取结果。五、底层 SDK 实现Map 与 Scrape 的调用机制示例文档没有展开 SDK 内部实现但结合仓库源码可以更深入地理解这两个调用点。示例锁定的firecrawl1.13.5对应仓库中 Python SDK 的 v1 实现 apps/python-sdk/firecrawl/v1/client.py。5.1 map_url网站页面发现与 search 过滤map_url的实现位于 apps/python-sdk/firecrawl/v1/client.py其签名支持一批可选参数参数SDK 中对应请求字段作用searchsearch过滤 URL 的关键词模式正是示例中由 LLM 生成的参数ignore_sitemapignoreSitemap跳过sitemap.xml处理include_subdomainsincludeSubdomains是否包含子域名链接sitemap_onlysitemapOnly仅使用 sitemap 作为来源limitlimit返回的最大 URL 数量timeouttimeout请求超时毫秒默认 30000use_indexuseIndex是否使用索引locationlocation地域配置SDK 内部会把这些参数组装进V1MapParams然后以POST {api_url}/v1/map提交携带Authorization: Bearer {api_key}并自动附加origin: python-sdk{version}标识。返回 200 且success为真时得到包含links列表的V1MapResponse。这也解释了示例脚本为什么用app.map_url(url, params{search: map_search_parameter})params字典会原样透传给请求search让站点地图发现聚焦在目标主题上。5.2 scrape_url抓取正文并返回 markdownscrape_url的实现位于 apps/python-sdk/firecrawl/v1/client.py。示例使用params{formats: [markdown]}要求返回 Markdown 格式正文这是后续喂给 LLM 的关键输入。SDK 支持多种formats值除markdown外还包括html、rawHtml、content、links、screenshot、screenshotfullPage、extract、json、changeTracking。formats之外scrape_url还支持headers、include_tags、exclude_tags、only_main_content、wait_for、timeout毫秒默认 30000、mobile、proxybasic/stealth/enhanced/auto、parse_pdf、actions、change_tracking_options、zero_data_retention等参数。请求同样发往POST {api_url}/v1/scrape返回的V1ScrapeResponse中携带请求的格式内容与页面元数据示例通过scrape_result[markdown]取出正文。5.3 关于 FirecrawlApp 与统一客户端仓库当前 Python SDK 已演进为统一客户端模式Firecrawl类见 apps/python-sdk/firecrawl/client.py默认暴露 v2 APIscrape、map、crawl、search、extract等同时通过.v1子对象保留 v1 方法scrape_url、map_url供渐进迁移。示例使用的FirecrawlApp是 v1 时代的类名firecrawl1.13.5固定版本保证了示例的可复现性升级 SDK 版本时需要注意方法名与参数风格的差异v2 中对应为app.map(url, params...)、app.scrape(url, params...)。六、输出格式与 JSON 抽取约定成功时脚本打印如下结构的 JSONindent2美化{ found: true, data: { plan_name: Pro, price: $49/month, features: [...] } }注意最外层found是模型与脚本之间的协议字段并不会出现在最终输出中——脚本只打印parsed_result.get(data)。这个约定的意义在于模型只需遵循固定的{found: bool, data: {...}}结构脚本据此判断这一页是否命中未命中就继续爬下一页data字段的内容完全由模型按目标自由组织因此该方案无需预定义 JSON Schema属于prompt 驱动的自由抽取与 SDK 中需要 schema 的extract接口在 apps/python-sdk/firecrawl/v1/client.py且当前已标记为 maintenance 模式形成对比。七、参数调优与扩展建议README 的 Notes 部分提醒可以按需调整脚本中的temperature或max_new_tokens。结合源码给出更具体的调优方向模型参数client.chat.completions.create调用目前未显式传temperatureDeepSeek 默认值即可满足大多数场景若发现 Map 关键词生成不够精准可适当降低temperature如 0.20.5让关键词更稳定若目标需要长篇幅抽取可调高max_tokens。候选页数量pages[:3]可按配额与命中率权衡调整。配额充足时可增加候选数追求速度与低成本时保持 3 个以内。scrape 参数formats可加入links便于模型结合页面链接推理对 JS 渲染站点可设置wait_for或actions等待动态内容加载。错误处理脚本对模型不可用做了前置探测但 Map 返回空链接、JSON 解析失败时也会优雅降级为提示后退出适合作为模板扩展到批量场景例如改为从文件读取多个 URL 与目标。八、总结一条可复用的LLM 定向爬取流水线deepseek-v3-crawler示例演示了一种高度可复用的模式用 LLM 的语义理解能力替代人工配置爬取规则。核心链路可以概括为Objective ──LLM── search 关键词 ──map_url── 候选 URL 列表 候选 URL 前 N 个 ──scrape_url(markdown)── 页面正文 正文 Objective ──LLM── {found: true, data: {...}} 或 Objective not met阅读本文后你可以直接运行 deepseek-v3-crawler.py 体验完整流程也可以把find_relevant_page_via_map与find_objective_in_top_pages两个函数拆出来嵌入到自己的数据采集、竞品分析或文档整理任务中。仓库中同目录的 README.md 与 requirements.txt 是快速复现的直接依据SDK 的 v1/client.py 则是理解每个参数底层行为的最佳参考。赞分享网页爬虫后端AI 应用【免费下载链接】firecrawlThe web data API to search, scrape, and interact at scale. 项目地址https://gitcode.com/GitHub_Trending/fi/firecrawl点击查看免费下载相关推荐用 PocketFlow 打造 LLM 驱动的网站爬虫与分析流水线pocketflow-tool-crawler 实战指南用 PocketFlow 打造 LLM 驱动的网站爬虫与分析流水线pocketflow tool crawler 实战指南 本文是一份基于 PocketFlo人工智能大模型AI Agent工作流自动化RAGAutoGPT 平台 Firecrawl Crawl 块详解以 Firecrawl 驱动整站爬取与内容提取AutoGPT 平台 Firecrawl Crawl 块详解以 Firecrawl 驱动整站爬取与内容提取 导读 Firecrawl Crawl 是 Auto人工智能AI Agent自主智能体Agent 工作流工作流自动化后端前端如何快速上手MiMo-V2.6-Pro-RL从下载到首次响应的5步教程零门槛入门全模态Agent大模型如何快速上手MiMo V2.6 Pro RL从下载到首次响应的5步教程零门槛入门全模态Agent大模型 MiMo V2.6 Pro RL 是小米 MiMo人工智能大模型基础模型多模态强化学习上一篇打破英语输入瓶颈Qwerty Learner如何让你的键盘记忆与单词学习同步提升下一篇43秒解锁星露谷物语资源StardewXnbHack让MOD制作变得如此简单创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

【ANSYS】转子动力学分析指南(Rotordynamic Analysis Guide)第三章

【ANSYS】转子动力学分析指南(Rotordynamic Analysis Guide)第三章

文章目录第三章:建立转子动力学分析模型3.1 建立模型3.2 部件建模3.3 轴承建模3.3.1 使用COMBIN14单元3.3.2 使用COMBI214单元3.3.2.1 用户自定义刚度和阻尼特性(当 KEYOPT(1) 0 时)3.3.2.2 轴承特性的计算(KEYOPT(1) > 0&…

📅 2026/9/30 2:06:37
用 CSS Grid 重新思考布局:从嵌套 Div 到二维布局抽象

用 CSS Grid 重新思考布局:从嵌套 Div 到二维布局抽象

文档技术博客教程 【免费下载链接】weekly 前端精读周刊。帮你理解最前沿、实用的技术。 项目地址: https://gitcode.com/GitHub_Trending/we/weekly 点击查看 免费下载 本文基于前端精读周刊第 124 期(前沿技术/124.精读《用 css grid 重新思考布局》.…

📅 2026/9/30 2:06:37
OpenAPI Specification 仓库贡献指南详解:分支策略、本地校验与版本发布全流程

OpenAPI Specification 仓库贡献指南详解:分支策略、本地校验与版本发布全流程

API设计文档后端 【免费下载链接】OpenAPI-Specification The OpenAPI Specification Repository 项目地址: https://gitcode.com/gh_mirrors/op/OpenAPI-Specification 点击查看 免费下载 本篇技术指南以 OpenAPI-Specification 仓库根目录的 CONTRIBUTING.md 为骨…

📅 2026/9/30 2:06:37
MORE NEWS

更多资讯

📰

工作三年,才明白Python技术栈要这样学

工作三年,从写爬虫脚本到负责后端服务,我踩过不少坑。刚入行时总想什么火就学什么,结果样样通样样松。后来才明白,Python技术栈的学习必须有一条主线:基础要牢,工具要熟,框架要精,工…

📰

markdown表格标题渲染判定C

markdown 表格与标题渲染判定 这是一段普通正文,用来判断段落是否撑开。## 二级标题| 列A | 列B || — | — || a1 | b1 || a2 | b2 |### 三级标题- 列表项一- 列表项二javaint a 1;加粗文字 与 行内代码。

📰

前端实用技巧:纯浏览器实现 PDF 转 Word,全程本地零上传

平时办公或者做开发,PDF 转 Word 绝对是超级高频的需求。不管是改文档、复制文案、二次编辑内容,PDF 都是只读的,根本没法直接修改,必须转成 Word 格式才方便操作。相信大家之前都用过各种转换工具,不是要开会员、满屏…

📰

闭式冷却塔优质厂家发展全景:用户力荐的靠谱生厂商推荐

基础科普:闭式冷却塔核心常识与应用边界 想要选到适配工况的闭式冷却塔,首先要搞懂这类设备的核心属性与应用范围,新手也能快速建立基础认知。 闭式冷却塔也叫密闭式冷水塔,属于工业循环冷却系统的核心换热设备,和传统…

📰

李宏毅生成式人工智能导论笔记 2024(五)

学习率:影响模型学习速度。调得过大,生成的人脸会更像目标人物,但可能丢失模型原有的文本理解能力(例如,提示“白T恤”却生成黑西装)。 训练步数:决定训练时长。步数越多,训练时间越…

📰

Python 正则表达式(十四):文本匹配、查找与替换

相信大家平时都见过这样的内容,内容里明明有我们需要的信息,但它们都混杂在一大段文字里。比如日志中的时间和 IP,聊天记录里的手机号和邮箱,没法像 JSON 或 CSV 那样直接按字段读取。 思维导图这种时候,正则表达式就很…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬