使用AWS Crawler爬取Amazon S3文件夹时如何排除日期格式路径
S3路径过滤仅爬取Current/data目录的实现方案
核心逻辑为:过滤所有包含YYYY-MM-DD日期格式、HH-MM-SS时间戳格式的路径,仅保留路径中包含/{表名}/Current/data的对象即可,以下是不同场景的实现方式:
1. 使用AWS CLI同步/拉取时过滤
直接通过CLI内置的exclude、include参数实现过滤,命令如下:
aws s3 sync s3://foo/ ./local-target/ \ --exclude "*" \ --include "*/Current/data/*" \ --exclude "*/*-*-*/*"
参数说明:
- 先设置
--exclude "*"默认排除所有路径 - 再通过
--include "*/Current/data/*"仅放行所有表目录下Current/data的路径 - 额外增加
--exclude "*/*-*-*/*"兜底排除所有带年-月-日格式的层级路径,避免匹配遗漏
2. 使用Python boto3遍历过滤的实现
如果需要自定义爬取逻辑,可以通过boto3遍历+正则过滤实现:
import boto3 import re s3 = boto3.client('s3') bucket_name = 'foo' # 匹配YYYY-MM-DD日期格式的正则 date_pattern = re.compile(r'\d{4}-\d{2}-\d{2}') paginator = s3.get_paginator('list_objects_v2') for page in paginator.paginate(Bucket=bucket_name): if 'Contents' not in page: continue for obj in page['Contents']: key = obj['Key'] # 跳过带日期格式的路径 if date_pattern.search(key): continue # 仅保留包含Current/data的路径 if '/Current/data' in key: # 此处写入你的下载/处理逻辑,示例如下 # s3.download_file(bucket_name, key, f'./local_save/{key.split("/")[-1]}') print(f"处理对象:{key}")
3. 通用爬虫的过滤规则
如果使用第三方爬虫工具,直接配置两条过滤规则即可:
- 排除规则:路径匹配正则
\d{4}-\d{2}-\d{2}/\d{2}-\d{2}-\d{2}/ - 包含规则:路径匹配正则
^[^/]+/Current/data/.*
内容的提问来源于stack exchange,提问作者DibyaRanjan
相关产品推荐
相关产品推荐

