使用Twint爬取推特时遭遇时间格式匹配错误求助
解决Twint时间格式匹配错误问题
错误根源
你遇到的time data '2020–04–29 00:00:00' does not match format '%Y-%m-%d %H:%M:%S'错误,核心原因是日期字符串里的分隔符是中文全角长破折号(–),而Twint内部解析时间时依赖的是英文半角短横杠(-),导致格式匹配失败。
解决方案
方法1:直接替换异常分隔符
在将日期赋值给Twint配置前,把中文破折号替换成英文短横杠即可快速修复:
config = twint.Config() config.Pandas = True payload = json.dumps(request.GET) payload = json.loads(payload) config.Search = payload.get('keyword') config.Lang = payload.get('language','en') config.Limit = int(payload.get('limit',100)) startDate = payload.get("startDate",None) if startDate: # 替换中文长破折号为英文短横杠 startDate = startDate.replace('–', '-') config.Since = startDate endDate = payload.get("endDate",None) print(startDate,endDate) if endDate: endDate = endDate.replace('–', '-') config.Until = endDate twint.run.Search(config)
方法2:用datetime标准化日期格式(更稳健)
如果担心输入的日期存在其他不规范情况,可以用datetime模块解析并重新生成标准格式的日期字符串,彻底避免格式兼容问题:
from datetime import datetime config = twint.Config() config.Pandas = True payload = json.dumps(request.GET) payload = json.loads(payload) config.Search = payload.get('keyword') config.Lang = payload.get('language','en') config.Limit = int(payload.get('limit',100)) startDate = payload.get("startDate",None) if startDate: # 先替换异常分隔符,再解析为datetime对象 clean_start = startDate.replace('–', '-') try: dt_start = datetime.strptime(clean_start, '%Y-%m-%d') # 生成Twint要求的标准格式字符串 config.Since = dt_start.strftime('%Y-%m-%d') except ValueError: print("起始日期格式错误,请传入YYYY-MM-DD格式的日期") endDate = payload.get("endDate",None) print(startDate,endDate) if endDate: clean_end = endDate.replace('–', '-') try: dt_end = datetime.strptime(clean_end, '%Y-%m-%d') config.Until = dt_end.strftime('%Y-%m-%d') except ValueError: print("结束日期格式错误,请传入YYYY-MM-DD格式的日期") twint.run.Search(config)
内容的提问来源于stack exchange,提问作者Keshav Krishna
相关产品推荐
相关产品推荐

