GoogleNews设置period='1d'仍返回超24小时新闻的解决方法
问题原因
- 核心问题是你重复实例化了
GoogleNews对象:第一行写的googlenews=GoogleNews(period='1d')在下一行就被googlenews=GoogleNews(lang='en', region='US')完全覆盖,新实例没有传入period参数,日期筛选规则根本没有生效,自然会拉到数周、数月前的旧闻。 - 你的筛选逻辑写在了
final_results的遍历里,但最后生成DataFrame用的是未经过滤的原始results列表,筛选逻辑没有对最终输出生效。 - 靠匹配date字段里的"week""month"关键词做过滤容错性极差,比如"2 days ago"这类超出24小时的内容不会被识别,很容易漏筛。
修复方法
- 初始化
GoogleNews时一次性传入所有配置参数,不要重复创建实例覆盖已有配置 - 直接用结果中自带的解析好的
datetime字段做时间判断,比匹配文本精准得多 - 最终生成DataFrame时使用经过去重、关键词筛选、时间筛选后的结果列表
修复后的完整代码:
from GoogleNews import GoogleNews from newspaper import Article import pandas as pd from datetime import datetime, timedelta search_term = "Binoculars" # 一次性传入所有配置,避免重复实例化覆盖参数 googlenews = GoogleNews(period='1d', lang='en', region='US') googlenews.search(search_term) raw_results = [] filtered_results = [] # 拉取多页结果 for page in range(1, 5): googlenews.getpage(page) raw_results.extend(googlenews.result()) # 计算24小时前的时间阈值 cutoff_time = datetime.now() - timedelta(days=1) for item in raw_results: # 去重 + 描述关键词匹配 if item not in filtered_results and search_term in item["desc"]: # 用解析好的datetime字段做精确时间筛选 item_pub_time = item.get("datetime") if item_pub_time and item_pub_time >= cutoff_time: filtered_results.append(item) # 用筛选后的结果生成DataFrame df = pd.DataFrame(filtered_results) df
补充说明
GoogleNews返回的每条结果自带已经解析完成的datetime字段,为标准Python datetime对象,直接和时间阈值比较即可,不需要手动解析"X days ago"这类文本,筛选精度可以严格卡在24小时范围内。- 运行后打印df的date列,不会再出现超出1天范围的旧内容。
内容的提问来源于stack exchange,提问作者omclinto
相关产品推荐
相关产品推荐

