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

问题原因
该网站的文章发布时间是通过前端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
相关产品推荐
相关产品推荐

