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

求助:使用BeautifulSoup获取页面Timestamp返回NaN问题

问题分析

你遇到的核心问题是:页面中cell-item的data-start/data-end属性是前端JavaScript动态计算并注入的,初始HTML里这些值默认是NaN,只有当页面加载完成、JS执行完毕后才会被替换成真实时间戳。你的代码存在两个关键问题:

  • requests请求的headers格式错误,导致服务器可能返回非预期内容
  • 即便尝试Selenium,也没有等待JS完成渲染就获取元素
解决方案

方案1:使用Selenium等待JS渲染完成

修正代码,确保等待页面完全加载,直到data-start不再是NaN:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 初始化Chrome浏览器(需确保chromedriver版本与浏览器匹配)
driver = webdriver.Chrome()
driver.get("https://www.claro.com.br/tv-por-assinatura/programacao/grade")

# 等待元素的data-start属性被正确填充(最多等待10秒)
wait = WebDriverWait(driver, 10)
cells = wait.until(
    EC.presence_of_all_elements_located(
        (By.CSS_SELECTOR, 'div.cell-item[data-start!="NaN"]')
    )
)

# 提取目标数据
for cell in cells:
    start_ts = cell.get_attribute('data-start')
    end_ts = cell.get_attribute('data-end')
    print(f"Start: {start_ts}, End: {end_ts}")

driver.quit()

方案2:直接调用后端API(更高效)

打开浏览器开发者工具的Network面板,观察XHR请求,会发现页面实际通过API获取节目数据。找到对应的接口后,可直接用requests请求,无需渲染页面:

import requests

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36'
}

# 替换为实际抓取到的API接口(需自行在开发者工具中确认)
api_url = "https://www.claro.com.br/api/tv/programacao/grade"
response = requests.get(api_url, headers=headers)
program_data = response.json()

# 从返回的JSON中提取时间戳信息
for item in program_data.get('programs', []):
    start_ts = item.get('startTimestamp')
    end_ts = item.get('endTimestamp')
    print(f"Start: {start_ts}, End: {end_ts}")

额外注意事项

  • 确保User-Agent与当前浏览器版本匹配,避免被服务器拦截
  • 部分API可能需要携带特定Cookie或请求头,可通过开发者工具复制完整请求头
  • 使用Selenium时,必须保证浏览器驱动版本与浏览器版本完全对应

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 14:45:18