Python爬虫使用strptime解析EDT时区日期字符串报错
问题解决方法
报错根因
Python标准库datetime.strptime的%z占位符仅支持解析±HHMM格式的数值型UTC偏移(比如+0800对应东八区),无法识别EDT、CST这类字母形式的时区缩写,因此格式匹配失败。
另外你原格式串里的%H是24小时制占位符,但目标时间是带AM/PM标识的12小时制格式,就算时区问题解决,这里也会把下午时间解析成凌晨时间,导致排序错误。
可选解决路径
路径1:移除时区直接解析(适合仅需按文章发布先后排序、不需要时区换算的场景)
原始时间字符串最后固定为「空格+3位时区缩写」共4个字符,直接截断后用修正后的格式串解析即可:
raw_date_str = soup.find('time').text.strip() # 截断末尾4位的时区部分,用12小时制占位符%I解析 date = datetime.datetime.strptime(raw_date_str[:-4], "%b %d, %Y %I:%M%p")
路径2:完整解析带时区的时间(需要保留时区信息、统一时间基准的场景)
标准库没有内置缩写时区解析能力,可以用python-dateutil库的解析器自动识别时间格式,不需要手动写匹配串:
- 先安装依赖:
pip install python-dateutil - 修改日期解析代码:
from dateutil import parser # 自动识别原始时间字符串,解析结果自带时区信息 date = parser.parse(soup.find('time').text.strip())
如果需要把所有文章时间统一转换为固定时区(比如北京时间)方便排序,可以搭配时区库做转换:
import pytz # 解析后统一转为东八区时间 date = parser.parse(soup.find('time').text.strip()).astimezone(pytz.timezone('Asia/Shanghai'))
内容的提问来源于stack exchange,提问作者NaNFill
相关产品推荐
相关产品推荐

