Python爬虫日期解析报错:'Sept 26 2022'不匹配'%b %d %Y'格式
问题排查与解决
核心错误原因
- Locale不匹配:
datetime.strptime默认依赖系统本地语言环境,如果你的系统locale不是英文,无法识别英文月份缩写"Sept",这是格式不匹配的主要诱因。 - 代码语法错误:
datetime_obj.enter code heredate()是无效语法,应改为datetime_obj.date()。 - 变量名混乱:
published_Date和Published_Date大小写混用,容易引发逻辑疏漏。
解决方案
方案1:手动设置英文locale(适配标准格式日期)
导入locale模块强制英文环境,同时修正代码中的变量与语法问题:
from datetime import datetime import locale # 设置英文locale(不同系统参数有差异,Windows可尝试'English_US') try: locale.setlocale(locale.LC_TIME, 'en_US.UTF-8') except: locale.setlocale(locale.LC_TIME, 'C') # 备选方案,强制使用C标准locale # 优化后的日期解析逻辑 published_date_parts = soup.find('time', class_="relative z-1").get_text(strip=True).split(", ") published_date = " ".join(published_date_parts[:2]).replace(',', '').replace('.', '') # 去除首尾空白后再解析,避免多余空格干扰格式匹配 datetime_obj = datetime.strptime(published_date.strip(), '%b %d %Y') published_date = datetime_obj.date() print("Published Date:", published_date)
方案2:使用python-dateutil自动解析(更省心,兼容多格式)
不想处理locale问题的话,推荐用python-dateutil库自动识别日期格式:
- 先安装依赖:
pip install python-dateutil
- 简化后的代码:
from datetime import datetime from dateutil.parser import parse published_date_text = soup.find('time', class_="relative z-1").get_text(strip=True) # fuzzy=True会自动忽略非日期内容,直接提取有效日期 datetime_obj = parse(published_date_text, fuzzy=True) published_date = datetime_obj.date() print("Published Date:", published_date)
额外优化点
原代码中循环拼接字符串的方式冗余,用" ".join()替代更简洁高效;调用get_text(strip=True)后,再用strip()处理最终拼接结果,能彻底避免多余空格引发的匹配问题。
内容的提问来源于stack exchange,提问作者Info Rewind
相关产品推荐
相关产品推荐

