news 2026/8/29 14:56:50

Crawl4AI 异步网页爬虫:三行代码把网页变成 LLM 可用的 Markdown

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Crawl4AI 异步网页爬虫:三行代码把网页变成 LLM 可用的 Markdown

Crawl4AI 异步网页爬虫:三行代码把网页变成 LLM 可用的 Markdown

【免费下载链接】crawl4ai🚀🤖 Crawl4AI: Open-source LLM Friendly Web Crawler & Scraper. Don't be shy, join here: https://discord.gg/jP8KfhDhyN项目地址: https://gitcode.com/GitHub_Trending/craw/crawl4ai

把网页喂给大语言模型之前,满屏的导航、广告、脚本代码都是噪音。Crawl4AI 是一个开源的异步网页爬取框架,能把渲染后的页面直接转成干净的 LLM 就绪 Markdown,核心调用只有一行arun。下面按使用场景讲清它最好用的部分。

项目速览:Crawl4AI 是什么、适合谁

  • 是什么:基于 Playwright(浏览器自动化库)的 Python 异步爬虫,驱动真实浏览器执行 JavaScript,再把页面内容转成 Markdown。
  • 解决什么问题:现代网页的动态内容传统抓取器拿不到,原始 HTML 又太脏,直接喂给大模型效果很差。Crawl4AI 一次完成渲染、清洗、转换。
  • 适合谁:给 RAG(检索增强生成)、AI Agent、数据管道持续准备网页数据的开发者。
  • 与同类工具的差异:多数爬虫框架吐原始 HTML,清洗靠你自己;Crawl4AI 输出的就是"LLM 就绪"的 Markdown,还内置本地缓存,pip 安装即可用,不需要任何 API key。
  • 部署形态:既可以是 pip 库,也带命令行工具crwl和 Docker API 服务,单机脚本到多应用共享都能覆盖。

动手实践:按场景使用 Crawl4AI

Crawl4AI 安装与环境准备

先装包,再跑一次安装后脚本,它会自动下载浏览器依赖;crawl4ai-doctor会检查环境是否就绪,出问题时会直接告诉你是哪一步缺了东西。

pip install -U crawl4ai crawl4ai-setup crawl4ai-doctor

如果浏览器下载失败,用python -m playwright install --with-deps chromium手动补齐即可。

直接拿到页面的 Markdown 内容 📄

最小用法就一行arun:传入 URL,返回的CrawlResult里既有转换后的 Markdown(result.markdown),也有分类好的链接列表(result.links,分内部/外部)。

import asyncio from crawl4ai import AsyncWebCrawler async def main(): async with AsyncWebCrawler() as crawler: result = await crawler.arun(url="https://example.com") print(result.success) print(result.markdown.raw_markdown[:500]) if __name__ == "__main__": asyncio.run(main())

跑完你会看到True和一段干净的 Markdown:标题、正文、表格都在,导航栏和广告块已经没了。

用 JavaScript 和等待条件处理动态页面

很多站点首屏之后才异步加载主体内容,直接抓会拿到半张空壳。下面的例子先执行一小段 JS 触发"加载更多"按钮,再用wait_for等目标元素出现后才提取内容,wait_for_timeout是这个等待的超时上限(毫秒)。

import asyncio from crawl4ai import AsyncWebCrawler async def main(): async with AsyncWebCrawler() as crawler: result = await crawler.arun( url="https://example.com/list", js_code=["document.querySelector('.load-more')?.click()"], wait_for=".item", wait_for_timeout=10000, ) print(len(result.markdown.raw_markdown)) if __name__ == "__main__": asyncio.run(main())

跑完打印的字符数明显比首屏多,说明列表项已经加载进页面才被提取,而不是只抓到初始骨架。

用 excluded_tags 排除导航与广告

页面噪音多的时候不必自己做后处理,把要丢弃的标签传进excluded_tags,它们在生成 Markdown 前就被剔除;remove_overlay_elements会顺手清掉遮罩、弹窗这类覆盖层元素。

import asyncio from crawl4ai import AsyncWebCrawler async def main(): async with AsyncWebCrawler() as crawler: result = await crawler.arun( url="https://example.com/article", excluded_tags=["nav", "footer", "aside", "form"], remove_overlay_elements=True, ) print(result.markdown.raw_markdown[:300]) if __name__ == "__main__": asyncio.run(main())

跑完得到的输出只剩正文部分,字符量比默认抓取少一大截,喂给模型时 token 成本也随之降下来。

完整场景拆解:从商品页抽取结构化字段

这是落地里最典型的需求:把散落在商品页里的信息,变成能直接入库的结构化数据。

输入:一个商品页 URL(https://example.com/product),外加一份 schema,描述要取哪些字段、字段大概在哪里。

操作:schema 里每个字段只给一个"大致正确"的 CSS 选择器,交给LLMExtractionStrategy(基于大模型按 schema 做字段匹配的策略):

import asyncio from crawl4ai import AsyncWebCrawler, CrawlerRunConfig, LLMExtractionStrategy schema = { "name": "Product Info", "baseSelector": "body", "fields": [ {"name": "name", "selector": "h1", "type": "text"}, {"name": "price", "selector": ".price", "type": "text"}, ], } async def main(): extractor = LLMExtractionStrategy( schema=schema, model="gpt-4.1-mini", api_key="your-api-key") config = CrawlerRunConfig(extraction_strategy=extractor) async with AsyncWebCrawler() as crawler: result = await crawler.arun( url="https://example.com/product", config=config) print(result.extracted_content) if __name__ == "__main__": asyncio.run(main())

为什么这么配:选择器只起"指个大概位置"的作用,站点改版导致 CSS 选择器不准时,大模型会结合上下文仍然挑出正确内容,管道不会因为对方页面动了一版就挂掉。想省 token 的字段(比如固定格式的日期)也可以把 type 换成 regex 规则,不走模型。

输出result.extracted_content是一段 JSON 字符串,形如{"name": "...", "price": "..."},解析后即可入库或交给下游流程。

Crawl4AI 常见报错排查

  • 首次运行提示找不到浏览器:Playwright 的 Chromium 没下载成功。修复:python -m playwright install --with-deps chromium
  • 动态页面抓出来是空的:页面异步渲染,首屏数据没出来就结束了。修复:加wait_for=".selector",或delay_before_return_html=1强制延迟提取。
  • 抓到的内容总是旧的:开了缓存后反复返回本地存储的结果。修复:调用时传bypass_cache=True
  • 设置超时不生效:参数名是page_timeout(毫秒),不是timeout。修复:CrawlerRunConfig(page_timeout=30000)

收尾

Crawl4AI 的核心价值一句话:把脏网页变成能直接喂给大模型的 Markdown 和结构化数据,浏览器管道你一行都不用自己搭。接下来可以往两个方向走:用 Deep Crawl 按策略自动遍历目录式抓取多个页面;或者部署它自带的 Docker API 服务,把爬虫变成网络服务供多个应用调用。更完整的参数说明见仓库内的 docs/md_v2/core/simple-crawling.md。

【免费下载链接】crawl4ai🚀🤖 Crawl4AI: Open-source LLM Friendly Web Crawler & Scraper. Don't be shy, join here: https://discord.gg/jP8KfhDhyN项目地址: https://gitcode.com/GitHub_Trending/craw/crawl4ai

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/29 14:55:42

如何用 --web-ui-dir 打造 ai-memory 自定义前端:完整实战指南

如何用 --web-ui-dir 打造 ai-memory 自定义前端:完整实战指南 【免费下载链接】ai-memory Solution for long term memory for agent coding CLIs and to facilitate handoff between different agent vendors 项目地址: https://gitcode.com/GitHub_Trending/ai…

作者头像 李华
网站建设 2026/8/29 14:54:20

电机控制进阶:PWM基础到高频注入无感控制全解析

在工业峰会的资料堆里翻到这份电机控制讲座文档时,我其实没抱太大期望,毕竟这类峰会资料经常是“目录级”内容,能有两页原理图就算不错。但这份资料确实出乎意料,它把电机控制从PWM基础一直讲到高频注入无感控制,还附带…

作者头像 李华
网站建设 2026/8/29 14:51:52

慢速英语听力精练五步法:从盲听到复述输出

很多英语学习者都有过这样的体验:打开一段慢速英语材料,听第一遍觉得单词都认识、语速也不快,可真到听写或者跟读的时候,却发现“没听懂”和“说不出”的问题同时暴露出来。市面上英语听力材料很多,但大多数人缺少的不…

作者头像 李华
网站建设 2026/8/29 14:51:49

吃透2018牛客二模编程题:校招笔试高频考点与避坑指南

2018年那会儿,牛客网的二模是秋招党几乎人人都会刷的一套题。我当时身边好几个同学放弃看剧刷综艺,晚上回到宿舍就打开牛客在线编辑器,硬啃这套题。现在回想起来,牛客模考(二模)那套编程题集合,…

作者头像 李华