恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

Crawl4AI 实战指南:网页采集从登录页到结构化 JSON 的 3 个关键能力

  • 首页
  • 资讯中心
  • /
  • Crawl4AI 实战指南:网页采集从登录页到结构化 JSON 的 3 个关键能力

相关资讯

LocalSend完整指南:免费开源的AirDrop替代,跨平台局域网传文件 2026/8/29 22:45:22
超声波测距实战:从HC-SR04到STM32滤波与避障应用 2026/8/29 22:40:22
Mermaid 图表工具入门教程:10 分钟跑起来,几行文本画出流程图与序列图 2026/8/29 22:40:22

最新资讯

Matlab拟合算法全解析:从线性回归到非线性拟合实战
边缘AI部署新选择:紧凑型GPU整机设计与落地实践
前端校招笔试全解析:从JavaScript闭包到工程化实战
Web前端春招笔试真题解析:JavaScript核心考点与手写代码实战
2023秋招小红书iOS笔试:考点分布、编程题思路与备考路线
图论关键点识别:从DFS连通性检查到割点算法应用

今日推荐

云计算SPI三类服务模式是逐层抽象的关系:IaaS提供最底层的硬件资源,PaaS在IaaS基础上封装了开发运行环境,SaaS则进一步封装为可直接使用的软件
最新稳定版(Python 3.14):这是目前官方推荐的最新稳定版本。作为最后一个采用传统“3.x”命名的版本
etc目录下的profile.d文件目录设置环境变量和全局脚本shell

本周热门

Nextcloud 桌面客户端:把同步交给它,你只管改文件
如何将 HTML 转成 Word 文档且格式不丢失?html-to-docx 使用教程
Anki 批量操作卡片完整指南:一次搞定上千张,不再逐张修改

本月精选

如何用DamaiHelper实现演唱会门票的智能自动化抢购:完整技术解决方案指南
第4篇:59 倍性能差距的索引瓶颈定位——一次教科书级的全表扫描调优
终极歌词批量下载神器:5分钟解决离线音乐库歌词同步难题

Crawl4AI 实战指南:网页采集从登录页到结构化 JSON 的 3 个关键能力

发布时间:2026/8/29 22:45:22
Crawl4AI 实战指南:网页采集从登录页到结构化 JSON 的 3 个关键能力 Crawl4AI 实战指南网页采集从登录页到结构化 JSON 的 3 个关键能力【免费下载链接】crawl4ai Crawl4AI: Open-source LLM Friendly Web Crawler Scraper. Dont be shy, join here: https://discord.gg/jP8KfhDhyN项目地址: https://gitcode.com/GitHub_Trending/craw/crawl4ai凌晨三点定时任务报警你的爬虫又挂在登录页上了。登录态是三天前存的 Cookie站点那边一次风控升级全作废了。换个目标站更糟——页面只抓到一半剩下 70% 的内容要靠加载更多点出来好不容易抓到整页 HTML解析脚本又因为对方改了一处 class 名直接崩掉。这三个问题——登录态、动态内容、结构化提取——基本是每个做网页采集的人都绕不开的。Crawl4AI 是一个基于 Playwright 的开源 LLM 友好型爬虫把这三件事做成了开箱即用的能力。读完这篇你会知道它分别是怎么做的以及哪些坑别踩。快速上手装好、装浏览器、跑第一条命令pip install crawl4ai crawl4ai-setup # 下载 Playwright 浏览器首次必做 # 抓一个页面输出 Markdown crwl crawl https://example.com -o markdown输出就是一段干净的 Markdown 正文导航栏、页脚、广告这些噪音默认被过滤掉可以直接喂给下游程序或 LLM。想先跑通 Python 侧最小形态是from crawl4ai import AsyncWebCrawler, BrowserConfig, CrawlerRunConfig import asyncio async def main(): async with AsyncWebCrawler(configBrowserConfig(headlessTrue)) as crawler: r await crawler.arun(https://example.com, configCrawlerRunConfig()) print(r.markdown.raw_markdown[:200]) # 前 200 字符预览 asyncio.run(main())基础爬取一条命令拿到干净的 Markdown是后面所有能力的地基登录一次跑一百次Profile 管理登录态它解决什么问题最典型的翻车现场你爬的是一个需要登录的后台代码里存了一堆 Cookie结果这周还好好的下周全部 401。只存凭据不存人站点随时能发现你不是真人。原理一句话Profile 不是存 Cookie而是持久化一整个用户浏览器数据目录Cookie、localStorage、缓存、UA 指纹都在里面。创建 profile 时它会弹出一个真实浏览器窗口你像正常人一样把登录流程走一遍短信码、二次验证都行按q保存之后每次爬取Crawl4AI 都用这份目录起浏览器对站点来说你就是那个已经登录过的老用户。动手试# 交互式创建弹出浏览器完成登录后按 q 保存 crwl profiles create bank-auth # 确认已保存的 profile crwl profiles list # 带着 profile 爬受保护页面 crwl crawl https://bank-portal.com/statements -p bank-auth -o json # 确认不再需要时删除 crwl profiles delete bank-auth想直接在 Python 里复用就是给BrowserConfig指个数据目录config BrowserConfig(headlessTrue, user_data_dir~/.crawl4ai/profiles/bank-auth)坑与注意事项Cookie 会过期。过期后表现是爬回来的是登录页而不是数据页重新跑一次crwl profiles create把流程走完即可不用改任何代码。Profile 里是明文的会话凭据别提交进代码仓库也别在共享机器上留给你没打算公开身份的 profile。登录态解决了下一个麻烦是页面本身很多站的内容要等 JS 执行完、甚至要滚动触发之后才出现。让页面自己滚动到加载完动态内容与等待策略它解决什么问题为什么我的输出只有第一屏因为默认行为是等页面加载完成就取 HTML而懒加载、无限滚动、异步填充的内容根本还没开始加载。time.sleep(5)是最常见的自救方式但 5 秒对长列表不够对短页面又白白浪费时间等于用时间换不确定性。原理一句话Crawl4AI 把取 HTML 的时机拆成了几个可配置的开关wait_untilnetworkidle等网络请求静默、wait_for轮询某个 CSS 选择器出现、delay_before_return_html给 JS 留最后一点时间。配合全页扫描时自动逐步滚动scroll_delay控制步长间隔、max_scroll_steps控制总步数列表就能被一页一页滚出来。动手试crwl crawl https://some-site.com/products \ -c wait_untilnetworkidle, # 等网络请求静默 max_scroll_steps8, # 全页扫描最多滚 8 步 scroll_delay0.5, # 每步滚动后留 0.5 秒加载 wait_for.card, # 确保至少一张卡片已渲染 css_selectormain, # 只取 main 内的内容 \ -o markdown动态页面等待、滚动、元素检测组合起来页面加载到什么程度再取 HTML 由你定坑与注意事项虚拟列表Twitter、Instagram 这类只渲染可视区域滚走的内容会被回收普通滚动会漏数据。这类页面用专门的VirtualScrollConfig官方有个带本地模拟站的完整示例docs/examples/virtual_scroll_example.py。别为了保险把delay_before_return_html调到 3 秒以上。wait_untilnetworkidle加wait_for已经覆盖了绝大多数场景固定长延迟只会拖慢整体吞吐。内容抓全了下一个问题下游要的是字段化的 JSON不是 Markdown。CSS 与 LLM 双通道把页面变成 JSON它解决什么问题用正则去切 HTML 是维护噩梦前端换一次 class你的解析脚本就崩一次。而全交给 LLM也不现实——慢、贵、结构不稳定的输出还要二次清洗。原理一句话Crawl4AI 把提取做成了可插拔的策略JsonCssExtractionStrategy拿一份 JSON schemabaseSelector 字段级选择器精确取字段零 LLM 成本LLMExtractionStrategy拿一段自然语言指令 可选 schema 让大模型理解页面语义适合改版频繁的结构两个策略可以同时挂在一次爬取里哪个稳用哪个。动手试CSS 通道先写一份 schema 文件这里对应docs/examples/cli/css_schema.json的格式{ name: ArticleExtractor, baseSelector: .card, fields: [ { name: title, selector: h4.card__title, type: text }, { name: link, selector: h4.card__title a, type: attribute, attribute: href } ] }# 结构化提取schema 定字段直接出 JSON crwl crawl https://some-site.com/news \ -e extract_css.yml \ -s docs/examples/cli/css_schema.json \ -o json输出就是[{ title: ..., link: ... }, ...]这样的数组。CSS 提取通道schema 写一次字段稳定可预期适合结构固定的站点LLM 通道一行就能起# -j 后跟自然语言指令不跟则用默认指令 crwl crawl https://some-site.com/blog/latest \ -j 提取文章标题、发布日期、作者按时间倒序排除广告 \ -o jsonLLM 提取依赖llm_config.yml里配置的 provider 和 API key首次使用先配好再跑。LLM 提取通道自然语言指令直接换结构化字段适合结构多变或语义复杂的页面坑与注意事项结构稳定的站点优先用 CSS 通道快、可预期、零 token 成本LLM 通道留给那些每次改版都得改选择器的站。用 LLM 提取时尽量传schema强制输出结构否则字段名和嵌套层级可能逐次漂移下游对不齐。同一个功能CLI 和 Python 是两种姿态选错会难受。三种用法怎么选CLI、Python API、还是混着来用法适合什么CLI 单条命令一次性抓页面、定时任务、CI 脚本给个 URL 就出 markdown/JSONPython API采集逻辑进业务代码复用浏览器上下文、多 URL 并发、带交互、带回调混合先用 CLI 快速验证选择器和 LLM 指令跑通后原样搬进 Python 项目什么时候该用它什么时候别用目标站是纯静态 HTML 的话requests加一个 HTML 解析库就够了没必要拉一个浏览器起来需要登录、等 JS、滚动加载、稳定出 JSON 字段时Crawl4AI 基本能覆盖但它本质是单机异步工具不是任务队列——大规模分布式采集要自己在外面再包一层调度。完整工作流把整个 API 文档站镜像成本地 Markdown背景把某开源项目的文档站API 参考部分几十个子页拉到本地存档列表页里全是子页链接单页无登录。配置BfsStrategy控制爬取深度include_patterns限定只进/docs/api/前缀CSS 提取器每页取标题和正文。import asyncio from pathlib import Path from crawl4ai import AsyncWebCrawler, BrowserConfig, CrawlerRunConfig from crawl4ai import BfsStrategy, JsonCssExtractionStrategy SCHEMA { # 与前面 CSS 通道同一套 schema 格式 name: DocPage, baseSelector: main, fields: [ {name: title, selector: h1, type: text}, {name: body, selector: article, type: html} ], } async def main(): async with AsyncWebCrawler(configBrowserConfig(headlessTrue)) as crawler: config CrawlerRunConfig( deep_crawl_strategyBfsStrategy(max_depth2), # 只下钻 2 层 include_patterns[*/docs/api/*], # 限定 API 前缀 extraction_strategyJsonCssExtractionStrategy(SCHEMA), ) results await crawler.arun_many([https://docs.example.com/docs/api/], configconfig) out Path(mirror); out.mkdir(exist_okTrue) for r in results: if r.extracted_content: (out / (r.url.split(/)[-1] .json)).write_text(r.extracted_content) print(fdone: {len(results)} pages) asyncio.run(main())产出mirror/目录下每页一个 JSON标题和正文已按 schema 对齐可以直接进知识库或向量库。收尾回到开头那三个场景登录态失效现在存成一个 profile过期了重走一次流程页面只抓一半交给滚动和等待策略解析脚本天天崩换成 CSS schema 或 LLM 指令。工具没变多麻烦少了一大半。文档总入口docs/虚拟滚动、CSS 与 LLM 提取的完整示例docs/examples/深度爬取策略说明docs/md_v2/core/deep-crawling.md【免费下载链接】crawl4ai Crawl4AI: Open-source LLM Friendly Web Crawler Scraper. Dont be shy, join here: https://discord.gg/jP8KfhDhyN项目地址: https://gitcode.com/GitHub_Trending/craw/crawl4ai创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号