Python如何比较两个日期 判断爬取的日期是否在今日起1年范围内
实现方案
核心逻辑是先把爬取到的字符串格式日期解析为Python原生日期对象,再做日期运算和比较,不要直接拿字符串和日期值对比,否则要么类型报错,要么因为字符串字典序规则返回错误结果。
依赖说明
需要用到两类库:
datetime:Python标准库,用于生成日期对象、获取当前日期python-dateutil:第三方库,用于准确计算N年后的日期,避免直接加365天遇到闰年、跨月导致的日期偏差,安装命令:pip install python-dateutil
完整实现代码
from datetime import datetime, date from dateutil.relativedelta import relativedelta from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By def is_contract_in_valid_range(driver): # 爬取页面上的合同到期日期文本 contract_end_date_str = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.XPATH, '//*[@id="lbl_CONTRACT_EXPIRES"]')) ).text.strip() # 把MM/DD/YYYY格式的字符串解析为纯日期对象,适配示例中"09/25/2022"这类格式 contract_end_date = datetime.strptime(contract_end_date_str, "%m/%d/%Y").date() # 计算今日起1年后的日期:取当前自然日(不带时分秒),按日历规则加1年,规避闰年误差 today = date.today() one_year_later = today + relativedelta(years=1) # 原生日期对象支持直接大小比较,早于/等于1年后的日期则返回True return contract_end_date <= one_year_later
常见踩坑点说明
- 不要直接比较日期字符串和日期对象:二者类型不兼容会直接抛出类型错误
- 不要直接对日期字符串做大小比较:字符串按ASCII字符顺序比对,比如
"10/01/2023"会被判定为小于"09/25/2024",结果完全不符合预期 - 不要用
timedelta(days=365)计算1年后的时间:遇到闰年、特殊日期时会出现1天左右的偏差,用relativedelta(years=1)是按日历规则计算年偏移,结果符合通用业务逻辑 - 如果页面爬取到的日期前后有空格、换行,记得加
.strip()清理后再做格式解析,避免解析报错
内容的提问来源于stack exchange,提问作者coinmaster
相关产品推荐
相关产品推荐

