ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Crawlee 如何用 crawlee.json、环境变量或 Configuration 类修改默认配置并确认优先级

Crawlee 如何用 crawlee.json、环境变量或 Configuration 类修改默认配置并确认优先级 Crawlee 如何用 crawlee.json、环境变量或 Configuration 类修改默认配置并确认优先级【免费下载链接】crawleeCrawlee—A web scraping and browser automation library for Node.js to build reliable crawlers. In JavaScript and TypeScript. Extract data for AI, LLMs, RAG, or GPTs. Download HTML, PDF, JPG, PNG, and other files from websites. Works with Puppeteer, Playwright, Cheerio, JSDOM, and raw HTTP. Both headful and headless mode. With proxy rotation.项目地址: https://gitcode.com/GitHub_Trending/cr/crawleeCrawlee 的所有爬虫共享一组配置参数存储目录、日志级别、状态持久化间隔、内存上限等。当你需要修改这些默认值——比如把存储目录从./storage改到别处或者在调试时把日志级别降到 DEBUG——有且只有三条途径在项目根目录放一个crawlee.json文件、设置CRAWLEE_前缀的环境变量、或者在代码里用Configuration类传参。三者可以同时使用生效顺序固定为构造参数constructor options 环境变量 crawlee.json 内置默认值也就是说构造函数里传的值永远优先环境变量会覆盖crawlee.jsonJSON 文件只在没有更高优先级来源时起作用作为基线配置。配置项速查键、环境变量与默认值下表摘自Configuration类的文档是完成本文任务时最常用的几个字段。完整的字段列表见 packages/core/src/configuration.ts选项键环境变量默认值storageDirCRAWLEE_STORAGE_DIR./storagelogLevelCRAWLEE_LOG_LEVEL-未设置时由日志模块兜底persistStateIntervalMillisCRAWLEE_PERSIST_STATE_INTERVAL_MILLIS60_000headlessCRAWLEE_HEADLESStruepurgeOnStartCRAWLEE_PURGE_ON_STARTtruepersistStorageCRAWLEE_PERSIST_STORAGEtruedefaultDatasetIdCRAWLEE_DEFAULT_DATASET_IDdefaultdefaultKeyValueStoreIdCRAWLEE_DEFAULT_KEY_VALUE_STORE_IDdefaultdefaultRequestQueueIdCRAWLEE_DEFAULT_REQUEST_QUEUE_IDdefaultmemoryMbytesCRAWLEE_MEMORY_MBYTES-未设置时为总内存的 1/4inputKeyCRAWLEE_INPUT_KEYINPUTxvfbCRAWLEE_XVFBfalseavailableMemoryRatioCRAWLEE_AVAILABLE_MEMORY_RATIO0.25其中对行为影响较大的几个环境变量docs/guides/configuration.mdx 单独做了说明CRAWLEE_STORAGE_DIRKeyValueStore、Dataset、RequestQueue的落盘路径默认./storage。CRAWLEE_PURGE_ON_START运行时作用域的存储目录默认在爬虫启动前清空设为false时不清理适合每次运行往 Dataset 追加数据、保留历史数据的场景。命名的named存储永远不会被清除。CRAWLEE_HEADLESS设为1时浏览器以 headless 模式启动代码中仍可覆盖例如给launchPuppeteer()传headless: true。CRAWLEE_LOG_LEVEL最小日志级别取值按严重度升序为DEBUG、INFO、WARNING、ERROR、OFF默认INFO即 DEBUG 消息不打印。CRAWLEE_VERBOSE_LOG设为true时启用冗长日志否则对已知会被重试的错误只记录 error message 级别的警告。CRAWLEE_MEMORY_MBYTES供ConcurrencySystem使用的系统内存上限MB用于限制并发请求数。方式一crawlee.json基线配置优先级最低在项目根目录创建crawlee.json写上要覆盖的配置键即可代码里不用做任何事{ persistStateIntervalMillis: 10000, logLevel: DEBUG }注意一个细节Crawlee 是从当前工作目录process.cwd()读取这个文件的见 packages/core/src/configuration.ts 中的loadFileOptions()。所以文件要放在你实际启动进程的那个目录下而不仅是“项目根目录”。下面这个示例直接来自官方文档用于验证该配置是否生效URL 用的是example.com实际使用时换成你自己的目标末尾的process.exit(0)是示例用来强制结束进程的运行方式import { CheerioCrawler, sleep } from crawlee; // We are not importing nor passing // the Configuration to the crawler. // We are not assigning any env vars either. const crawler new CheerioCrawler(); crawler.router.addDefaultHandler(async ({ request }) { // for the first request we wait for 5 seconds, // and add the second request to the queue if (request.url https://www.example.com/1) { await sleep(5_000); await crawler.addRequests([https://www.example.com/2]) } // for the second request we wait for 10 seconds, // and abort the run if (request.url https://www.example.com/2) { await sleep(10_000); process.exit(0); } }); await crawler.run([https://www.example.com/1]);运行后如何确认crawlee.json被采纳文档给出了两个可核对的现象默认 Key-Value Store 中会出现CRAWLEE_CRAWLER_STATISTICS文件里面显示 1 个已完成的请求、爬虫运行时长约 10 秒——这说明状态在 10 秒后被持久化了正是persistStateIntervalMillis: 10000的效果。终端里除了INFO日志外还会输出DEBUG日志说明logLevel: DEBUG也被正确读取。方式二环境变量不改代码即可临时改配置环境变量适合临时调整比如只在某次运行时把日志切到 DEBUG。常用项的用法# 临时开启 DEBUG 日志 CRAWLEE_LOG_LEVELDEBUG npm start # 自定义存储目录默认 ./storage CRAWLEE_STORAGE_DIR/data/crawler-storage npm startCRAWLEE_HEADLESS1可以强制浏览器 headless 启动CRAWLEE_MEMORY_MBYTES可以收窄ConcurrencySystem的内存预算。这些变量对当前进程生效改环境变量即改行为不需要碰代码。方式三Configuration 类构造参数优先级最高Configuration是不可变对象所有值在构造时确定之后不能修改——对实例属性赋值会直接抛出TypeError: Configuration is immutable. Pass options via the constructor instead.。有两种用法。给爬虫传自定义实例覆盖它自己的所有配置来源import { CheerioCrawler, Configuration, sleep } from crawlee; // Create new configuration const configuration new Configuration({ // Set the persistStateIntervalMillis option to 10 seconds persistStateIntervalMillis: 10_000, }); // Pass the configuration to the crawler const crawler new CheerioCrawler({ configuration });其余的router/run代码与方式一示例相同效果也一致运行结束后默认 Key-Value Store 中同样出现CRAWLEE_CRAWLER_STATISTICS文件统计显示 1 个完成请求、约 10 秒运行时。读取全局配置Crawlee 内部维护一个全局单例爬虫默认使用它。你可以通过Configuration.getGlobalConfiguration()读取当前生效的值配置值是实例上的普通属性import { Configuration } from crawlee; const config Configuration.getGlobalConfiguration(); // Access configuration values directly as properties console.log(config.persistStateIntervalMillis);这个全局实例也可以通过全局serviceLocator访问或整体替换serviceLocator.getConfiguration()读同一个实例serviceLocator.setConfiguration(...)可以在任何爬虫创建之前全局换掉配置对象。一个容易踩的坑如果你new Configuration(...)了却没有通过configuration选项传给爬虫爬虫仍会走全局配置。官方文档专门解释了这种情况——由于persistStateIntervalMillis仍是默认值 60 秒上面的短示例会在约 15 秒后被强制结束统计文件不会生成看起来就像“配置没生效”实际是配置根本没被使用。如何确认三种方式的优先级优先级规则是“构造参数 环境变量 crawlee.json 内置默认值”而logLevel恰好是能在终端直接观察的选项适合拿来逐层验证。以下现象均由文档中的行为描述推导可按顺序执行只留crawlee.jsonlogLevel: DEBUG不设置任何环境变量代码不传参运行后终端能看到 DEBUG 日志。再加环境变量CRAWLEE_LOG_LEVELOFF npm startDEBUG 日志消失。同样的 JSON 文件还在但环境变量把logLevel覆盖成了OFF——这一步证明“环境变量 crawlee.json”。再加构造参数在代码里传入new Configuration({ logLevel: OFF })或任意你选择的级别并通过configuration选项给爬虫此时无论环境变量和 JSON 里写什么都以构造参数为准——这对应“构造参数 环境变量”。反方向也可以验证JSON 里写logLevel: OFF、环境变量设CRAWLEE_LOG_LEVELDEBUG时你应该看到 DEBUG 日志同样是环境变量胜出。如果想在运行时程序化地核对最终生效的值用Configuration.getGlobalConfiguration()读属性即可例如config.storageDir、config.logLevel读到的就是当前进程实际采用的配置。边界与注意点crawlee.json只从当前工作目录读取在别的目录启动进程时项目根目录的这份文件不会被看到。环境变量为空字符串时按“未设置”处理会继续回落到crawlee.json或内置默认值。persistStateIntervalMillis默认是 60 秒。如果你的爬虫运行不到 60 秒就被结束例如示例中的强制退出默认 Key-Value Store 里不会有CRAWLEE_CRAWLER_STATISTICS文件——这不是故障是状态还没来得及持久化文档中两个“未配置时文件不存在”的说明都是这个原因。修改存储布局相关的变量CRAWLEE_STORAGE_DIR、三个*_ID变量会影响数据落盘位置与命名改之前确认旧数据是否还需要配合CRAWLEE_PURGE_ON_STARTfalse才能保留上一轮运行的数据。完成本文的验证后配置相关的下一站是理解配置值最终流向的存储层数据默认写在./storageKeyValueStore内键值文件的布局规则{CRAWLEE_STORAGE_DIR}/key_value_stores/{STORE_ID}/{KEY}.{EXT}见 docs/guides/result_storage.mdx。【免费下载链接】crawleeCrawlee—A web scraping and browser automation library for Node.js to build reliable crawlers. In JavaScript and TypeScript. Extract data for AI, LLMs, RAG, or GPTs. Download HTML, PDF, JPG, PNG, and other files from websites. Works with Puppeteer, Playwright, Cheerio, JSDOM, and raw HTTP. Both headful and headless mode. With proxy rotation.项目地址: https://gitcode.com/GitHub_Trending/cr/crawlee创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表