从NVD爬取当日漏洞时日期匹配失败的问题排查
排查NVD漏洞日期匹配失败的原因及解决办法
- 隐藏空白/不可见字符问题
爬取到的日期字符串可能带有前后空格、换行符(\n)或制表符(\t),比如实际值是' 01/09/2023 ',和你定义的'01/09/2023'完全不相等。解决方式是对爬取到的日期做去空白处理:
# 假设date是爬取到的日期字符串 cleaned_date = date.strip() if currentday == cleaned_date: print("match")
- 日期包含时间部分
NVD返回的发布日期通常会附带时间信息,比如'01/09/2023 03:15:00 UTC',只拿纯日期字符串去匹配自然失败。可以提取日期部分,或者用datetime模块解析后比较:
from datetime import datetime # 提取日期部分后解析 nvd_date = datetime.strptime(date.split(' ')[0], '%m/%d/%Y') # 解析你的currentday current_day = datetime.strptime(currentday, '%m/%d/%Y') if nvd_date.date() == current_day.date(): print("match")
- 爬取结果是列表而非字符串
如果你的爬取逻辑返回的是列表类型(比如['01/09/2023']),直接用字符串做==比较肯定不成立。解决方式是取列表的第一个元素再处理:
# 假设date是爬取到的列表 actual_date = date[0].strip() if currentday == actual_date: print("match")
- 日期格式混淆(MM/DD/YYYY vs DD/MM/YYYY)
NVD使用的日期格式是MM/DD/YYYY(月/日/年),如果你误把01/09/2023当成了1日9月,而实际是1月9日,那自然匹配不上。先核对爬取到的原始日期值,再调整currentday的格式。
快速排查技巧
先打印爬取到的原始日期的类型和原始值,能快速定位问题:
print(type(date)) print(repr(date)) # repr会显示所有隐藏字符,比如空格、换行
比如输出'01/09/2023\n'说明存在换行符,['01/09/2023']说明返回结果是列表,据此针对性调整即可。
内容的提问来源于stack exchange,提问作者Waldecker
相关产品推荐
相关产品推荐

