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把网页喂给大模型前要先拿到干净的 Markdown。Crawl4AI 是一个开源的、对 LLM 友好的异步网页爬虫它用真实浏览器渲染页面滤掉导航、广告和 Cookie 弹窗返回可直接进 RAG 与数据流水线的结构化 Markdown。底层基于 Playwright浏览器进程可池化复用一个进程内多次爬取共享同一套浏览器实例。Crawl4AI能做什么场景与能力全景能力围绕URL 进、LLM 可用文本出这一个目标组织常见场景对应的能力如下表使用场景帮它做什么构建 RAG 语料网页一键转 Markdown自动过滤噪音动态页面爬取真实浏览器渲染执行 JS 触发加载结构化数据提取按 CSS 选择器或 LLM 模型抽取字段整站深爬自动发现链接BFS/DFS 控制深度需登录态站点session_id 复用会话与 Cookie批量任务异步并发加缓存共享浏览器池反检测轮换 User-Agent、模拟用户行为用3条命令完成安装并确认浏览器环境安装只有三条命令第二条负责下载 Playwright 浏览器第三条做环境自检。pip install -U crawl4ai # 安装核心包 crawl4ai-setup # 安装浏览器等运行时依赖 crawl4ai-doctor # 校验安装是否就绪crawl4ai-doctor会逐项打印已装浏览器与配置检查结果全部通过即可运行若浏览器缺失可手动执行python -m playwright install chromium补齐。系统级依赖详见安装文档。5分钟跑通首次爬取下面 9 行代码是 Crawl4AI 最短完整入口渲染真实页面并取回 Markdown。import asyncio from crawl4ai import AsyncWebCrawler async def main(): async with AsyncWebCrawler() as crawler: result await crawler.arun(urlhttps://www.nbcnews.com/business) print(result.markdown.raw_markdown[:500]) if __name__ __main__: asyncio.run(main())输入一个 HTTP 页面 URL此处用官方示例中的商业频道页。过程启动无头 Chromium等页面加载完成后按默认策略把 HTML 转成 Markdown。输出result.markdown.raw_markdown是完整 Markdownfit_markdown是启发式过滤后的精简版。CrawlResult 还带链接与媒体result.links分内外部链接result.media收集图片与视频result.metadata存状态码和耗时失败时看result.error_message。用JS点击加载更多抓取动态渲染内容列表页首屏往往只有几条数据其余靠点击才渲染静态抓法必然缺内容。from crawl4ai import AsyncWebCrawler, CrawlerRunConfig, CacheMode async def main(): cfg CrawlerRunConfig( cache_modeCacheMode.BYPASS, # 不读缓存实时抓取 js_codeconst bdocument.querySelector(button.load-more); bb.click();, wait_for.article-loaded, # 等新内容渲染出来再返回 ) async with AsyncWebCrawler() as crawler: result await crawler.arun(urlhttps://www.nbcnews.com/business, configcfg) print(result.markdown.raw_markdown[:500])js_code在取 HTML 之前执行wait_for会阻塞到目标选择器出现结果里就同时包含首屏和点击加载出的条目。多步点击、滚动这类复杂交互可以写成.c4a脚本文件再整体调用避免把长 JS 塞进参数里。用Crawl4AI的BFS深爬策略构建站点级语料单页跑通后下一个问题是整站怎么抓。Crawl4AI 顺着页面内链接按广度优先展开用max_depth控制规模。from crawl4ai import AsyncWebCrawler, CrawlerRunConfig from crawl4ai.deep_crawling import BFSDeepCrawlStrategy from crawl4ai.content_scraping_strategy import LXMLWebScrapingStrategy async def main(): cfg CrawlerRunConfig( deep_crawl_strategyBFSDeepCrawlStrategy(max_depth2, include_externalFalse), scraping_strategyLXMLWebScrapingStrategy(), # 轻量解析免开浏览器 ) async with AsyncWebCrawler() as crawler: results await crawler.arun(urlhttps://docs.crawl4ai.com, configcfg) for r in results: print(r.url, len(r.markdown.raw_markdown))深爬模式下arun返回 CrawlResult 列表每项的metadata.depth标记层级include_externalFalse保证只爬同域。URL 模式过滤、关键词相关性打分等策略仓库里官方深爬示例有完整实现。用Pydantic模型加OpenAI抽取结构化字段语料就绪后多数任务要的是价格、标题这类字段而不是 Markdown 本身。LLMExtractionStrategy把页面内容发给大模型并强制输出符合 Pydantic 模型。import os from pydantic import BaseModel, Field from crawl4ai import AsyncWebCrawler, CrawlerRunConfig, LLMConfig, CacheMode from crawl4ai.extraction_strategy import LLMExtractionStrategy class ModelFee(BaseModel): model_name: str Field(..., description模型名称) input_fee: str Field(..., description输入token单价) async def main(): cfg CrawlerRunConfig( cache_modeCacheMode.BYPASS, extraction_strategyLLMExtractionStrategy( llm_configLLMConfig(provideropenai/gpt-4o, api_tokenos.getenv(OPENAI_API_KEY)), schemaModelFee.model_json_schema(), extraction_typeschema, instruction抽取所有模型名称及其输入token单价, ), ) async with AsyncWebCrawler() as crawler: result await crawler.arun(urlhttps://openai.com/api/pricing/, configcfg) print(result.extracted_content)抽取结果以 JSON 写入result.extracted_content。没有模型 API 时可换CosineStrategy做纯统计的语义聚类抽取不依赖外部服务。超时、旧缓存与动态内容缺失等高频问题批量任务卡在单个慢页面上现象是某 URL 跑满一分钟才报超时原因是page_timeout默认 60000 毫秒慢页面会一直占用解法是在CrawlerRunConfig传page_timeout30000收紧阈值再按result.success判断是否重试。第二次抓取仍是前一天内容现象是站点已更新、结果却没变原因是缓存默认开启且页面仍在有效期内解法是实时抓取传cache_modeCacheMode.BYPASS或按场景选用其他CacheMode。抓回的 Markdown 比页面短现象是只有首屏文字原因是动态渲染还没完成页面就返回了解法是加wait_for等关键选择器或用js_code主动触发加载。result.success 为 True 但 extracted_content 为空现象是 LLM 抽取返回空数组原因是页面内容过长被截断或 schema 描述与页面不匹配解法是先用css_selector框定目标区域schema 字段保持精简指令写具体。结语Crawl4AI 把浏览器渲染、内容清洗、结构化抽取三段链路收进一个 API从 URL 到 LLM 可用 Markdown 只需要十几行代码。把开头 9 行示例里的 URL 换成目标站点跑一遍再按需求叠加js_code或深爬策略即可。【免费下载链接】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),仅供参考
