Scrapy开发中如何从提取到的日期时间文本中仅提取日期部分
Scrapy提取文本中指定日期部分的实现方法
你可以选择以下两种方案实现需求,均能稳定提取到目标值Nov 13, 2021。
方案1:提取阶段直接通过Scrapy内置正则过滤
Scrapy选择器自带正则匹配能力,不需要对拿到的原始字符串做二次处理,直接在XPath调用链后使用re_first()方法匹配日期格式即可,代码最简洁:
'datetime': response.xpath('//*[@class="article_byline"]/text()[2]').re_first(r'([A-Z][a-z]{2} \d{1,2}, \d{4})')
正则匹配逻辑:固定匹配「3位英文月份缩写 + 空格 + 1-2位日期数字 + 逗号 + 空格 + 4位年份」的日期格式,自动忽略前导的横杠、空格,以及后缀的具体时间、时区信息。
方案2:获取原始文本后通过Python正则截取
如果你需要同时留存原始时间文本,或是后续还要拆分时间、时区字段,可以先拿到完整原始字符串,再单独做正则匹配:
import re raw_datetime_str = response.xpath('//*[@class="article_byline"]/text()[2]').get() date_result = re.search(r'([A-Z][a-z]{2} \d{1,2}, \d{4})', raw_datetime_str) # 匹配成功则取分组内容,失败则赋值为None避免报错 publish_date = date_result.group(1) if date_result else None
两种方案的适用场景:
- 方案1代码量少,不需要额外导入模块,适合只需要日期字段、不需要保留原始时间文本的场景
- 方案2灵活度高,适合需要对原始时间文本做多维度拆分的场景
提示:如果后续站点调整了日期显示格式(比如月份显示全称、日期固定为2位数字),只需要对应调整正则规则即可适配,维护成本很低。
内容的提问来源于stack exchange,提问作者yangyang
相关产品推荐
相关产品推荐

