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

运行Twitter推文爬取代码报AttributeError: 'NoneType' object has no attribute 'getText'如何解决

报错原因
  • 你使用的爬取逻辑是基于多年前旧版Twitter(现X平台)的前端结构开发的,旧版本用到的js-tweet-text推文内容类名早已在平台迭代中被弃用,soup.find()无法匹配到对应元素会返回None,此时调用getText()方法就会触发你遇到的报错。
  • 当前X平台的所有推文内容都是通过JavaScript动态渲染生成的,直接用urllib.request请求拿到的只是未执行JS的初始静态HTML源码,本身就不包含实际渲染后的推文内容,自然找不到对应元素。
  • 你贴出的代码存在笔误,filter = re.findall(r'"(.*)"', x)ut末尾多打了ut字符,需要先删除。
调整方案

方案1:使用支持动态渲染的爬取工具

采用Selenium、Playwright等工具模拟真实浏览器运行,等待页面JS执行完成、内容渲染完毕后再提取元素,同时替换为当前平台稳定的元素选择器。
使用前需要先安装对应依赖:pip install selenium,并下载和你浏览器版本匹配的驱动。
调整后的示例代码如下:

from bs4 import BeautifulSoup as soupy
import re
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

# 初始化浏览器
driver = webdriver.Chrome()
driver.get('https://twitter.com/samad_bloch0x1')

# 等待推文元素加载完成
wait = WebDriverWait(driver, 10)
wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, 'div[data-testid="tweetText"]')))

# 获取渲染完成的页面源码
html = driver.page_source
soup = soupy(html, features="html.parser")

# 替换为当前平台有效的推文选择器,先判断是否找到元素避免报错
tweet_elem = soup.find('div', {'data-testid': 'tweetText'})
if tweet_elem:
    x = tweet_elem.getText()
    filter_res = re.findall(r'"(.*)"', x)
    if filter_res:
        tweet = filter_res[0]
        print(tweet)
    else:
        print("未匹配到符合规则的内容")
else:
    print("未找到推文内容")

driver.quit()

方案2:使用官方开发接口

直接申请X平台的公开开发者接口获取推文数据,这种方式稳定性更高,不需要应对前端结构变化的适配问题,返回的结构化数据也更方便处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 00:36:04