尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Crawl4AI:LLM友好的异步网页爬虫

Crawl4AI:LLM友好的异步网页爬虫 Crawl4AILLM友好的异步网页爬虫【免费下载链接】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搭建RAG管道时把文档站或竞品页面灌进向量库之前你得先解决一个前置问题把原始HTML变成没有导航、页脚和广告干扰的Markdown还要让JS渲染出来的定价表格真正变成文本。Crawl4AI是开源的LLM友好网页爬虫与抓取器它驱动真实浏览器完成页面渲染直接输出干净Markdown并能在同一份配置里调用LLM把页面内容抽成结构化JSON。 最小可运行示例import asyncio from crawl4ai import AsyncWebCrawler, CrawlerRunConfig, CacheMode async def main(): async with AsyncWebCrawler() as crawler: config CrawlerRunConfig(cache_modeCacheMode.BYPASS) result await crawler.arun(urlhttps://www.nbcnews.com/business, configconfig) print(result.markdown[:500]) asyncio.run(main())运行后result.markdown是一份去除导航与广告元素后的Markdown文本可直接投喂给LLM。默认缓存模式是ENABLED重复抓取同一URL会命中本地缓存调试阶段建议用BYPASS保证拿到最新页面。 按场景挑能力锁定正文区域只要文章主体或某个列表块时给CrawlerRunConfig传css_selectorarticleCSS选择器用法与浏览器开发者工具里的一致爬虫只对该子树做Markdown转换页面上其余噪音不再进入输出。触发动态内容需要点击加载更多、滚动到底或等待懒加载时用js_code注入脚本、wait_for等待DOM条件成立再返回config CrawlerRunConfig( js_codedocument.querySelector(.load-more).click(), wait_fordocument.querySelectorAll(article).length 20, )一次调用深爬整站不想自己维护URL队列时挂一个BFSDeepCrawlStrategy广度优先深度爬取策略逐层扩展同域链接返回值从单个结果变成一个结果列表每项带metadata[depth]表示层级from crawl4ai import BFSDeepCrawlStrategy config CrawlerRunConfig( deep_crawl_strategyBFSDeepCrawlStrategy(max_depth2, include_externalFalse), )压低噪音与成本Markdown太杂时在markdown_generator上挂PruningContentFilter(threshold0.48, threshold_typefixed)基于文本密度剪枝的低相关内容过滤器配合excluded_tags[nav, footer, aside]直接删掉结构性噪音批量任务开CacheMode.ENABLED避免重复渲染。 实战串联批量抓取竞品定价页输出JSON以抓三个竞品的套餐定价页落盘成JSONL为例整个流程只需要一次爬虫实例。先用arun_many批量拿到基础Markdowncss_selector限定到定价区块控制每次转换的体积config CrawlerRunConfig(cache_modeCacheMode.BYPASS, css_selectorsection.pricing) results await crawler.arun_many( urls[https://shop-a.com/plans, https://shop-b.com/pricing], configconfig, ) for r in results: print(r.url, r.success)如果定价卡片是JS动态渲染的单独给对应URL补一份带js_code和wait_for的配置再跑一遍即可未渲染的页面result.markdown会是空壳。拿到正文之后把结构化交给LLM。定义一个Pydantic模型作为Schema提取结果会按该模型约束输出from pydantic import BaseModel, Field from crawl4ai import LLMExtractionStrategy, LLMConfig class Plan(BaseModel): name: str Field(..., description套餐名) price: str Field(..., description价格) extract LLMExtractionStrategy( llm_configLLMConfig(provideropenai/gpt-4o-mini, api_tokenos.getenv(OPENAI_API_KEY)), schemaPlan.model_json_schema(), extraction_typeschema, instruction提取页面中每个套餐的名称与价格, )最后把每个页面的extracted_content逐行落盘JSON字符串直接解析写入文件import json with open(plans.jsonl, w) as f: for r in results: if r.extracted_content: f.write(json.dumps(json.loads(r.extracted_content), ensure_asciiFalse) \n)跑完得到每行一个定价记录的JSONL文件可以直接进数据库或向量库中间不需要再写HTML解析代码。⚖️ 同类工具中的定位Crawl4AI的定位是本地可控的LLM数据入口爬虫跑在你自己的机器或Docker里浏览器行为、代理、指纹全部可配输出格式面向LLM消费场景设计。Scrapy这类框架更偏通用抓取管道HTML解析与反爬要自己拼装SaaS形态的抓取服务如Firecrawl开箱即用但数据要经过对方的服务器且深度爬取的分支逻辑不可控。维度Crawl4AIScrapy云端抓取服务输出形态MarkdownJSON原始ItemMarkdown深度爬取内置BFS/DFS/Best-First需自研有限数据路径全在本地全在本地经第三方许可协议MITBSD-3商用订阅如果你的诉求是网页变AI可消费数据且需要完全掌控抓取行为它更适合作为RAG管道的数据前端如果目标是构建大型结构化站点采集系统Scrapy的管道模型可能更顺手。 踩坑与调优首次运行报找不到chromium或依赖缺失时装浏览器二进制python -m playwright install --with-deps chromium输出Markdown又长又脏时收紧过滤excluded_tags[nav, footer, aside]加挂PruningContentFilterresult.markdown上同时提供raw_markdown未过滤与fit_markdown过滤后可对比两者长度确认过滤生效。JS页面返回空内容或半截内容时把page_timeout调大并用wait_for等待具体DOM条件元素数量、文本出现而不是依赖固定睡眠固定睡眠在慢网环境下同样不可靠。高并发下内存持续增长时在BrowserConfig开启memory_saverTrue同时关掉不需要的screenshot与媒体提取单实例并发数按机器内存上限折算。 深入探索先git clone https://gitcode.com/GitHub_Trending/craw/crawl4ai拉下源码跑一遍docs/examples/quickstart.py覆盖基础、过滤、选择器、LLM提取四条主线API细节查docs/md_v2/core/quickstart.md深度爬取策略与过滤器实现看crawl4ai/deep_crawling/目录。一个具体的下一步拿你手上任意一个文档站做BFS深爬对比过滤前后的token数直观感受PruningContentFilter省了多少向量库成本。【免费下载链接】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),仅供参考
返回列表