You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 12:39:15