Crawl4AI 怎么抓取懒加载图片让它们出现在 result.media 中 📅 发布时间:2026/9/9 22:46:49 👁 浏览次数: Crawl4AI 怎么抓取懒加载图片让它们出现在 result.media 中【免费下载链接】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用 Crawl4AI 抓取一个图片页时常见的问题是直接arun()后检查result.media.get(images, [])数量明显少于页面里实际的图片——因为很多网站只在用户滚动到图片可视区域时才加载它们默认配置下爬虫抓取的是未滚动时的页面状态。目标是通过调整CrawlerRunConfig中的几个参数让爬虫把页面滚一遍、等图片加载完成从而使result.media里包含完整的图片列表。本文适用于使用AsyncWebCrawler 浏览器策略抓取网页的场景即已能运行 Crawl4AI 的基本环境Playwright、Python 已就绪参数默认值与行为依据仓库文档 lazy-loading、Link Media、CrawlerRunConfig 参数参考 和 CrawlResult 参考。先分清是哪种滚动懒加载 vs 虚拟滚动选对参数前先确认页面属于哪种滚动行为仓库文档对两者的区分很明确场景滚动时 DOM 行为对应参数懒加载图片、传统无限滚动Load More 追加新元素追加到页面scan_full_pageTrue虚拟滚动Twitter/Instagram 风格顶部元素被替换DOM 大小基本不变VirtualScrollConfigscan_full_page只适用于内容随滚动累积的情况如果列表是替换式的滚动后顶部图片消失scan_full_page抓不全需要用VirtualScrollConfig指定可滚动容器选择器具体用法见 Virtual Scroll 文档。下面的主路径针对最常见的懒加载图片场景。核心参数及默认值在CrawlerRunConfig中有四个参数直接决定懒加载图片能否被抓到默认值来自 参数参考与源码 CrawlerRunConfig 一致参数类型 / 默认值作用wait_for_imagesbool(False)在结束抓取前等待图片加载完成scan_full_pagebool(False)自动滚动整页以触发懒加载scroll_delayfloat(0.2)扫描整页时每个滚动步骤之间的延迟秒max_scroll_stepsint or None(None)整页扫描的最大滚动步数None 表示滚动到整页加载完为止wait_for_imagesTrue让爬虫在最终提取前确保图片加载完scan_full_pageTrue让爬虫从顶部滚到底部每次滚动触发一批懒加载scroll_delay给站点留加载时间。长页面或无限滚动页面对scan_full_page来说比较耗资源必要时用max_scroll_steps限制步数、调整scroll_delay。主路径配置爬虫并验证 result.media完整可运行示例来自 lazy-loading 文档把示例中的https://www.example.com/gallery替换成你要抓的懒加载图片页即可import asyncio from crawl4ai import AsyncWebCrawler, CrawlerRunConfig, BrowserConfig from crawl4ai.async_configs import CacheMode async def main(): config CrawlerRunConfig( # 等待图片完全加载后再结束抓取 wait_for_imagesTrue, # 让爬虫自动滚动整页触发懒加载 scan_full_pageTrue, # 滚动整页 scroll_delay0.5, # 每次滚动间隔 0.5 秒给站点加载时间 cache_modeCacheMode.BYPASS, # 绕过缓存避免拿到旧的抓取结果 verboseTrue ) async with AsyncWebCrawler(configBrowserConfig(headlessTrue)) as crawler: result await crawler.arun(https://www.example.com/gallery, configconfig) if result.success: images result.media.get(images, []) print(Images found:, len(images)) for i, img in enumerate(images[:5]): print(f[Image {i}] URL: {img[src]}, Score: {img.get(score,N/A)}) else: print(Error:, result.error_message) if __name__ __main__: asyncio.run(main())两个要点说明cache_modeCacheMode.BYPASS文档明确指出如果缓存开启重复抓取可能跳过部分网络请求怀疑缓存导致新图片缺失时应设为CacheMode.BYPASS强制全新抓取。调试阶段建议保留这一项。BrowserConfig(headlessTrue)想肉眼观察滚动过程时可以改为headlessFalse查看。验证结果检查 result.media 里的图片arun()返回的CrawlResult.media是一个Dict[str, List[Dict]]默认键为images、videos、audio。图片项的常见字段见 Link Media 文档src图片 URLaltalt 文本如有desc周边文本片段或简短描述可选score基于尺寸、位置等的启发式相关性分数文档示例中为 3 这类数值实际值随页面而异width/height爬虫探测到的尺寸type通常为image、video或audiogroup_id相关图片分组时分配的 ID验证方式就是上面代码里的判断result.success为真、len(images)覆盖你预期看到的图片数量且打印出的img[src]是真实图片地址而不是懒加载占位符如 base64 短串或 1x1 占位图。若result.success为False打印result.error_message排查。可选同时过滤外部图片与域名如果只需要主域名的图片、想丢弃广告等第三方图片在配置中追加过滤项同样来自 lazy-loading 文档config CrawlerRunConfig( wait_for_imagesTrue, scan_full_pageTrue, scroll_delay0.5, # 只保留主域名的图片 exclude_external_imagesTrue, # 排除特定域名产生的链接 exclude_domains[spammycdn.com], )注意文档说明的限制exclude_external_imagesTrue是全保留主域名或全保留的开关目前没有基于域名部分保留外部图片的配置需要更细粒度控制时要用自定义逻辑或 hooks。图片仍缺失时的排查lazy-loading 文档 给出的排查路径按现象对应处理图片分批加载、数量仍然偏少增大scroll_delay或如果站点需要多次点击 Load More、复杂交互改用 hooks / JS 代码在循环中多次部分滚动、反复触发加载按钮hooks 用法见 Page Interaction 文档。占位图要等某个事件才换成真图例如图片加载完成后才有loaded类名可以配wait_forcss:img.loaded或自定义 JSwait_for让爬虫在该条件满足后再提取内容。重复抓取结果不变确认cache_modeCacheMode.BYPASS避免缓存跳过网络请求。页面需要登录或脚本触发才出图可以用js_code在页面加载后执行脚本例如 参数参考 中给出的点击按钮示例document.querySelector(button)?.click();或在js_code_before_wait中先触发加载、再由wait_for等待结果。适用边界scan_full_page只解决追加式滚动懒加载图片、传统无限滚动。滚动内容会替换已有内容的虚拟滚动站点必须改用VirtualScrollConfig必填container_selector以及scroll_count、scroll_by、wait_after_scroll完整用法和示例见 Virtual Scroll 文档。页面极长时scan_full_pageTrue的扫描成本较高文档建议用max_scroll_steps和scroll_delay控制节奏或对超长列表改用 Virtual Scroll。wait_for_imagesTrue会拖慢只要文字的抓取本文场景是抓图片保留它即可。按上面的配置跑通后result.media[images]里的数量和内容就是判断标准滚动触发的懒加载图片会带上真实src进入这个列表配合score、alt等字段就能做后续筛选。【免费下载链接】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),仅供参考