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

如何用BeautifulSoup抓取推文的time标签?

解决推文日期获取返回None的问题

问题原因

  • 动态class失效:X(原Twitter)的CSS类名是动态生成的,会频繁变更,你用的css-901oao r-18jsvk2...这类class很快就会失效,无法定位到正确元素。
  • 元素层级错误:你定位的div并不包含<time>标签,<time>通常在推文的头部区域,和推文内容的div不是同一个层级。

修复方案

方案1:用稳定属性定位推文容器

放弃依赖动态class,改用推文的data-testid="tweet"属性定位每个推文容器,再从中提取<time>标签:

page = driver.page_source
soup = BeautifulSoup(page, "html.parser")
# 定位所有推文容器
tweets = soup.find_all(attrs={"data-testid": "tweet"})

for tweet in tweets:
    # 从推文容器中查找time标签
    time_tag = tweet.find("time")
    if time_tag:
        # 获取显示的日期文本
        print(time_tag.get_text(strip=True))
        # 获取精确的时间戳(datetime属性)
        print(time_tag.get("datetime"))

方案2:等待页面完全加载

如果页面未加载完成就获取源码,会导致找不到元素,添加显式等待确保元素加载:

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

# 等待推文加载完成,最多等待10秒
WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.CSS_SELECTOR, '[data-testid="tweet"] time'))
)

page = driver.page_source
soup = BeautifulSoup(page, "html.parser")
tweets = soup.find_all(attrs={"data-testid": "tweet"})

for tweet in tweets:
    time_tag = tweet.find("time")
    if time_tag:
        print(time_tag.get_text(strip=True), time_tag.get("datetime"))

方案3:直接用Selenium定位time标签

跳过BeautifulSoup,直接用Selenium查找元素,避免页面源码同步问题:

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

WebDriverWait(driver, 10).until(
    EC.presence_of_all_elements_located((By.CSS_SELECTOR, '[data-testid="tweet"] time'))
)

time_tags = driver.find_elements(By.CSS_SELECTOR, '[data-testid="tweet"] time')
for tag in time_tags:
    print(tag.text, tag.get_attribute("datetime"))

注意事项

  • X的页面结构会持续更新,若上述方法失效,可打开浏览器开发者工具(F12),重新查看推文和<time>标签的最新定位属性。
  • 频繁爬取可能触发反机制,建议添加合理的请求间隔。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 22:05:22