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

如何用Python BeautifulSoup从谷歌新闻搜索页提取具体日期?

提取谷歌新闻文章的具体日期(而非相对时间)

嘿,我懂你现在的困扰——你抓取到的是「1 day ago」这类相对时间,但想要的是像「2024. 05. 20」这样的具体年月日格式对吧?

其实谷歌新闻页面里藏着精确的具体日期,只是没直接显示在页面可见文本里。你之前抓取的slp类div是谷歌渲染后的相对时间展示,而真正的精确日期存放在<time>标签的datetime属性中,这个属性存储了ISO格式的标准时间,我们可以直接提取它来转换成想要的格式。

另外要注意,谷歌有反爬机制,直接用requests.get可能会被拦截,所以最好加个浏览器的User-Agent头模拟正常访问。

下面是修改后的代码,我会一步步给你解释:

from bs4 import BeautifulSoup
import requests
from datetime import datetime

article_link = "https://www.google.com/search?q=citi+group&tbm=nws&ei=u9_1WsetC67l5gKRt7qYBA&start=0&sa=N&biw=1600&bih=794&dpr=1"
# 模拟浏览器请求头,避免被反爬拦截
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36'
}
page = requests.get(article_link, headers=headers)
soup = BeautifulSoup(page.content, 'html.parser')

# 遍历每个新闻条目容器(谷歌的类名可能会更新,若失效可通过浏览器开发者工具重新定位)
for news_item in soup.find_all('div', class_='Gx5Zad fP1Qef xpd EtOod pkphOe'):
    # 找到条目内的time标签
    time_element = news_item.find('time')
    if time_element:
        # 提取datetime属性里的ISO格式时间
        iso_time = time_element['datetime']
        # 转换为你想要的「YYYY. M. D」格式
        # 处理Z后缀,转换成datetime对象后格式化
        formatted_date = datetime.fromisoformat(iso_time.replace('Z', '+00:00')).strftime('%Y. %m. %d')
        print(formatted_date)

关键说明:

  • 为什么不直接转换相对时间? 比如把「1 day ago」转换成今天减一天的日期,这种方法误差很大:谷歌的相对时间基于它的服务器时间,和你的本地时间可能有偏差,而且遇到「2 weeks ago」这类模糊时间也没法精确转换。直接用datetime属性的精确时间是最靠谱的方案。
  • 类名更新问题:谷歌的页面结构偶尔会调整,如果上面的容器类名失效了,你可以打开浏览器开发者工具(F12),找到新闻条目的外层div,查看它的最新类名,替换掉代码里的class_参数就行。

内容的提问来源于stack exchange,提问作者hard1009

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:27:33