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

Crawl4AI 实战手册:从安装到并发爬取、动态页面与结构化提取的完整路径

  • 首页
  • 资讯中心
  • /
  • Crawl4AI 实战手册:从安装到并发爬取、动态页面与结构化提取的完整路径

相关资讯

awesome-public-datasets 实战指南:10 分钟找到一份能用的公开数据集 2026/8/29 15:24:46
美赛B题深度解析:从沙堡模型到工程优化实战 2026/8/29 15:24:46
Hoppscotch API 测试工具 3 分钟上手:从克隆到发出第一个请求 2026/8/29 15:19:46

最新资讯

FPGA计数器设计精讲:从秒表模块到Verilog实现与调试
多模态AGI驱动算力新基建:资本开支逻辑与工程实践
系统动力学模型在塑料污染预测与治理策略评估中的应用
PyTorch从零实现Transformer:手写多头注意力与编解码器
数学建模中的帕累托分析:从二八定律到实战应用
Python控制流深度解析:条件判断、循环与流程控制实战指南

今日推荐

云计算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 实战手册:从安装到并发爬取、动态页面与结构化提取的完整路径

发布时间:2026/8/29 15:24:46
Crawl4AI 实战手册:从安装到并发爬取、动态页面与结构化提取的完整路径 Crawl4AI 实战手册从安装到并发爬取、动态页面与结构化提取的完整路径【免费下载链接】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凌晨两点你把一段 30 万字符的 HTML 原样丢给大模型它回给你的答案却淹没在导航栏、广告位和页脚版权信息里而一个同步爬虫卡在某个 JS 渲染的页面上后面排队的 50 个 URL 全部干等。Crawl4AI 是一个开源的 LLM 友好型异步爬虫框架把浏览器渲染 → 内容清洗 → Markdown/结构化输出这条链路压缩成几次 API 调用这篇文章带你装好它、跑通基础案例并把动态页面、并发控制和结构化提取这三块能力拆解到位。它到底能帮你解决什么页面噪声拖垮 LLM 输入质量原始 Markdown 把页面上的每个角落都翻译进去了。Crawl4AI 内置内容过滤器fit_markdown会给你一份剪掉导航、页脚后的干净正文直接可喂给模型。⚡串行爬取慢得没法上生产arun_many基于异步 IO 并发处理一批 URL默认按可用内存自适应调节并发度还能流式返回结果。️JS 渲染的页面抓回来是空壳通过js_code注入脚本、wait_for等待条件、extraction_strategy输出 JSON 三个参数组合动态站点和结构化数据都能拿到。五分钟跑通第一个可运行案例安装和浏览器内核准备各占一行跑完crawl4ai-doctor无报错就可以开爬pip install -U crawl4ai crawl4ai-setup crawl4ai-doctor下面是最小可运行示例一次arun调用拿到清洗后的 Markdownimport asyncio from crawl4ai import AsyncWebCrawler async def main(): async with AsyncWebCrawler() as crawler: # 自动启动无头 Chromium result await crawler.arun(https://example.com) print(result.markdown[:300]) # raw_markdownHTML 转 Markdown 的完整结果 if __name__ __main__: asyncio.run(main())跑完你会在控制台看到 example.com 页面的 Markdown 开头部分——没有 requests 里那种script标签堆砌这就是LLM 友好的第一层含义。核心能力一Markdown 输出的两种粒度怎么切换解决的问题result.markdown其实存了两份内容用错了粒度要么 LLM token 白白烧在导航上要么解析时又丢了细节。import asyncio from crawl4ai import AsyncWebCrawler, CrawlerRunConfig, CacheMode from crawl4ai import DefaultMarkdownGenerator from crawl4ai.content_filter_strategy import PruningContentFilter async def main(): config CrawlerRunConfig( cache_modeCacheMode.BYPASS, # 默认即 BYPASS这里显式声明 markdown_generatorDefaultMarkdownGenerator( content_filterPruningContentFilter(threshold0.4, threshold_typefixed) ), ) async with AsyncWebCrawler() as crawler: result await crawler.arun(https://news.ycombinator.com, configconfig) print(len(result.markdown.raw_markdown)) # 全量转换约 6 万字符 print(len(result.markdown.fit_markdown)) # 剪枝后只剩正文主体 if __name__ __main__: asyncio.run(main())关键参数raw_markdown是无过滤的完整转换结果适合做存档和二次解析fit_markdown是经过PruningContentFilter剪枝后的版本threshold0.4表示保留相关性得分前 40% 的文本块这是喂给 LLM 的推荐粒度。过滤器会增加约 50ms 处理时间换来的是 token 成本下降一个量级。核心能力二JS 渲染页面的脚本注入与等待怎么配解决的问题内容靠按钮点击或异步请求加载的页面直接提取只能拿到骨架。import asyncio from crawl4ai import AsyncWebCrawler, BrowserConfig, CrawlerRunConfig, CacheMode js_load_more (async () { const btn [...document.querySelectorAll(button)] .find(b b.textContent.includes(Load More)); if (btn) { btn.click(); } // 触发加载更多的异步加载 })(); async def main(): config CrawlerRunConfig( cache_modeCacheMode.BYPASS, js_code[js_load_more], # 页面加载完成后注入执行 wait_for3000, # 给异步请求留足时间再提取 page_timeout60000, ) async with AsyncWebCrawler(configBrowserConfig(headlessFalse)) as crawler: result await crawler.arun(https://example.com/feed, configconfig) print(result.markdown.raw_markdown[:300]) if __name__ __main__: asyncio.run(main())js_code接收字符串列表每条都会在页面就绪后执行wait_for可以是超时毫秒数或 CSS 选择器选择器形式会等到元素出现才提取比死等更稳。本地调试时把headlessFalse打开能直接看到脚本点击的过程排查选择器问题时非常直观。核心能力三并发爬取的流式结果与信号量怎么调解决的问题要一次抓几十个页面串行跑要等最慢的那个还容易把浏览器内存撑爆。import asyncio from crawl4ai import AsyncWebCrawler, CrawlerRunConfig, CacheMode urls [ https://example.com/page1, https://example.com/page2, https://example.com/page3, ] async def main(): config CrawlerRunConfig( cache_modeCacheMode.BYPASS, streamTrue, # 边完成边产出不等全部结束 semaphore_count8, # 最多同时 8 个页面在跑 ) async with AsyncWebCrawler() as crawler: async for result in await crawler.arun_many(urls, configconfig): if result.success: print(f[OK] {result.url}{len(result.markdown.raw_markdown)} 字符) else: print(f[ERR] {result.url} {result.error_message}) if __name__ __main__: asyncio.run(main())默认调度器会按系统可用内存自适应调节并发度streamTrue让结果在各自完成时立刻产出适合接后续入库或 LLM 处理。单个 URL 失败不会中断整批success标志位配合error_message足够你做重试逻辑。组合拳——实际项目里怎么搭配用场景 A登录态下的多步操作。先访问登录页再带着同一session_id抓后台页面后续步骤用js_onlyTrue避免重复导航最后kill_session()清理result1 await crawler.arun( urlhttps://example.com/login, session_idmy_session, # 建立会话Cookie/Storage 都会保留 ) result2 await crawler.arun( urlhttps://example.com/dashboard, session_idmy_session, # 复用同一浏览器上下文 js_onlyTrue, # 只执行 JS不重新加载页面 ) await crawler.kill_session(my_session) # 用完即释放适合电商后台、需要翻页点击的报表页等一个页面状态要带到下一个动作的流程。场景 BCSS 定位 JSON 提取一次到位。用css_selector把抓取范围锁死在列表区extraction_strategy直接吐出结构化数据全程不花 LLM 的钱from crawl4ai import JsonCssExtractionStrategy schema { name: Items, baseSelector: div.item, fields: [ {name: title, selector: h2, type: text}, {name: link, selector: a, type: attribute, attribute: href}, ], } config CrawlerRunConfig( cache_modeCacheMode.BYPASS, css_selectordiv.list, # 只在这个容器里干活 extraction_strategyJsonCssExtractionStrategy(schema), ) result await crawler.arun(urlhttps://example.com/list, configconfig) data json.loads(result.extracted_content)适合列表结构稳定、需要批量入库的页面换选择器、换 schema别动流程。场景 CLLM 提取不规整页面。页面结构没法用选择器锁死时用 Pydantic 模型定义你要的字段让模型按 schema 解析word_count_threshold1把内容尽量保留给模型看from pydantic import BaseModel, Field from crawl4ai import LLMConfig, LLMExtractionStrategy class ProductFee(BaseModel): name: str Field(..., description产品或模型名称) input_fee: str Field(..., description输入费用) config CrawlerRunConfig( cache_modeCacheMode.BYPASS, word_count_threshold1, extraction_strategyLLMExtractionStrategy( llm_configLLMConfig(provideropenai/gpt-4o, api_tokenyour-token), schemaProductFee.model_json_schema(), instruction提取文中所有条目及其费用不要遗漏, ), )适合定价页、财报这类人能读懂但 DOM 很乱的内容输出同样落在extracted_content。踩坑与避坑指南现象启动爬虫后长时间卡住或直接报错页面一个都加载不了。原因Playwright 的浏览器内核没装crawl4ai-setup在部分环境静默失败。 解法python -m playwright install --with-deps chromium装完再跑crawl4ai-doctor确认。现象raw_markdown里混着导航、页脚、广告token 烧得心疼。原因默认只生成 raw 版本fit_markdown需要显式挂内容过滤器才会产出。 解法markdown_generatorDefaultMarkdownGenerator(content_filterPruningContentFilter(threshold0.4, threshold_typefixed))。现象动态页面抓回来是空壳只有标题和骨架文本。原因提取时机早于 JS 异步请求完成wait_for没设或设小了。 解法wait_for5000或者传一个内容容器的 CSS 选择器等它出现再提取。现象并发量一上来浏览器内存飙升、页面互相拖慢。原因并发数超过内存调度器的舒适区多个页面同时跑重资源请求。 解法CrawlerRunConfig(semaphore_count8)压低上限浏览器侧BrowserConfig(memory_saving_modeTrue)降低单页开销。Crawl4AI 把渲染、清洗、提取压进了同一套异步 API覆盖能跑的页面和能解析的结构代价是它的输出质量依赖你给对粒度参数纯静态小批量场景用它属于杀鸡用牛刀。把第一段代码里的 URL 换成你自己的页面跑一遍然后按能力二给你的动态页面加一个wait_for——这就是接入生产前的最小闭环。【免费下载链接】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 号