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

新闻文章实际发布日期抓取结果不符的技术咨询

解决新闻发布日期抓取不符的问题

页面显示的正确发布日期

问题原因

该网站的文章发布时间是通过前端JavaScript动态渲染的:你用requests获取的是服务器返回的原始HTML,其中仅包含相对时间的占位内容(如Heute, vor -60 Minuten);而页面上显示的Heute, 07:40是浏览器执行JS后,将服务器提供的原始时间戳转换为本地友好格式的结果。

解决方案

方法1:用Selenium模拟浏览器渲染

Selenium会模拟真实浏览器加载页面并执行JS,能直接获取最终渲染后的时间内容。

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
import time

url = 'https://kurier.at/sport/tennis/auftaktniederlage-fuer-dominic-thiem-in-rio-de-janeiro/402336705'
# 替换为你的ChromeDriver本地路径(Windows/Mac/Linux路径需对应调整)
service = Service('chromedriver.exe')
driver = webdriver.Chrome(service=service)
driver.get(url)

# 等待页面JS渲染完成(可根据网络情况调整等待时间)
time.sleep(2)

# 获取渲染后的日期文本
date_element = driver.find_element(By.CSS_SELECTOR, 'span.article-meta-date.ng-star-inserted')
print(date_element.text)

driver.quit()

方法2:解析页面中的原始时间戳

直接从页面源码中提取服务器提供的原始时间戳,自行转换为所需格式,无需依赖浏览器。

import requests
from bs4 import BeautifulSoup
import json
from datetime import datetime
import pytz

url = 'https://kurier.at/sport/tennis/auftaktniederlage-fuer-dominic-thiem-in-rio-de-janeiro/402336705'
page = requests.get(url)
soup = BeautifulSoup(page.content, 'html.parser')

# 查找包含文章元数据的JSON脚本
for script in soup.find_all('script', type='application/ld+json'):
    try:
        article_data = json.loads(script.string)
        if 'datePublished' in article_data:
            # 提取ISO格式时间戳并转换为奥地利时区(网站所属时区)
            raw_time = article_data['datePublished']
            tz_vienna = pytz.timezone('Europe/Vienna')
            publish_time = datetime.fromisoformat(raw_time.replace('Z', '+00:00')).astimezone(tz_vienna)
            
            # 格式化为页面显示的样式
            today = datetime.now(tz_vienna).date()
            if publish_time.date() == today:
                print(f"Heute, {publish_time.strftime('%H:%M')}")
            else:
                print(publish_time.strftime('%d.%m.%Y, %H:%M'))
            break
    except json.JSONDecodeError:
        continue

方法对比

  • Selenium方法:无需查找隐藏数据,逻辑简单,但运行速度较慢,需额外安装浏览器驱动。
  • 时间戳解析方法:运行高效,无额外依赖,但需要准确找到存储时间戳的位置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 16:01:01