尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Crawl4AI 网页爬取快速指南:从安装到结构化数据提取

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/crawl4aiCrawl4AI 是一个面向 LLM 的开源异步网页爬虫传入 URL它启动无头 Chromium 渲染页面返回可直接喂给大模型的干净 Markdown也能按模板输出结构化 JSON。核心入口是异步类AsyncWebCrawler页面行为由CrawlerRunConfig参数控制。下面按你上手时真正会卡住的顺序讲装好跑通、动态内容、懒加载、列表抽取。安装 Crawl4AI 并跑通第一个网页pip install -U crawl4ai playwright install chromiumimport asyncio from crawl4ai import AsyncWebCrawler async def main(): async with AsyncWebCrawler() as crawler: result await crawler.arun(https://example.com) print(result.success, result.url) print(result.markdown.raw_markdown[:200]) asyncio.run(main())第一行输出True和最终 URL第二行是该页 HTML 转成的 Markdown 前 200 个字符。arun是单次爬取的统一入口成功后CrawlResult里带markdown、links、media、status_code字段。如何让 JavaScript 渲染的内容先加载再抓取现象页面骨架是 JS 动态写进 DOM 的不加等待时抓到的 Markdown 几乎是空的。最小可行解法用wait_for指定目标元素的选择器爬虫会在该元素出现前挂起确认渲染完成后再取 HTML需要额外执行脚本时用js_codefrom crawl4ai import AsyncWebCrawler, CrawlerRunConfig config CrawlerRunConfig( wait_for.product-card, wait_for_timeout15000, js_codedocument.querySelectorAll([data-load])[0]?.click(), ) async with AsyncWebCrawler() as crawler: result await crawler.arun(https://your-shop.example.com/list, configconfig) print(result.markdown.raw_markdown[:300])预期输出里能看到.product-card渲染出的商品文案。wait_for既可以是 CSS 选择器也可以是 JS 条件表达式wait_for_timeout单位是毫秒超时后会继续抓取而非报错。原理一句话抓取发生在导航完成之后、页面销毁之前所有等待都是在同一次存活页面内完成的。懒加载的图片怎么滚出来再抓到现象瀑布流、图集页的img带data-src占位只有滚进视口才请求真实地址。arun默认只渲染首屏result.media里只有首屏那几张图。最小可行解法让爬虫代替你滚动整页from crawl4ai import AsyncWebCrawler, CrawlerRunConfig config CrawlerRunConfig( scan_full_pageTrue, scroll_delay0.5, ) async with AsyncWebCrawler() as crawler: result await crawler.arun(https://gallery.example.com/virtual-scroll) print(len(result.media.all))预期输出是滚动结束后整页图片的总数远大于首屏数量。scan_full_page控制是否滚动到底scroll_delay控制每步之间的秒数。原理一句话懒加载监听的是滚动事件爬虫按真实滚动行为逐屏触发脚本才会把data-src换成真实地址。示例页的抓取效果见下图如何把商品列表页抽成结构化 JSON现象你要的不是整页 Markdown而是每个卡片的标题、价格等字段手写正则维护成本高。最小可行解法用JsonCssExtractionStrategy写一份选择器模板爬虫按模板逐项抽取结果在extracted_content里JSON 字符串import json from crawl4ai import AsyncWebCrawler, CrawlerRunConfig, JsonCssExtractionStrategy schema { name: Products, baseSelector: div.product-card, fields: [ {name: title, selector: h2, type: text}, {name: price, selector: span.price, type: text}, ], } config CrawlerRunConfig(extraction_strategyJsonCssExtractionStrategy(schema)) async with AsyncWebCrawler() as crawler: result await crawler.arun(https://your-shop.example.com/list, configconfig) print(json.loads(result.extracted_content))预期输出是一个列表每个元素含title和price。baseSelector决定按哪个元素切分列表项type为text或attribute后者再加attribute指定属性名。原理一句话整套流程只跑 CSS 选择器不经过 LLM因此对重复结构的列表页抽取接近零延迟。哪些参数容易配错、哪些场景别用 Crawl4AI时间单位不统一page_timeout、wait_for_timeout是毫秒默认 30000scroll_delay、wait_after_scroll是秒默认 0.2。把毫秒值当秒填页面会多等十几秒。缓存语义0.8 版本起bypass_cache已废弃改用cache_modeCacheMode.BYPASS该默认值即为 BYPASS要启用缓存需显式设CacheMode.ENABLED。纯静态接口页别用它目标只是 JSON API 或无 JS 的静态 HTML 时直接发 HTTP 请求更省启动浏览器的开销是纯浪费。无限滚动的虚拟列表Twitter、Instagram 式 feedDOM 节点会被回收scan_full_page抓不全需要用virtual_scroll_configVirtualScrollConfig指定容器选择器处理。更多参数细节、Hooks 与代理配置见项目根目录下的 docs/md_v2/。【免费下载链接】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),仅供参考
返回列表