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

请求修复获取指定用户最新Twitter推文链接的报错代码

解决Twitter用户最新推文链接爬取中的AttributeError问题

问题根源

你遇到的AttributeError: 'NoneType' object has no attribute 'find',本质是代码里的soup.find("div", class_="tweet")返回了None——也就是BeautifulSoup在页面里找不到你指定的元素,后续调用last_tweet.find()自然会报错。具体原因有三个:

  • 动态内容渲染:Twitter现在用客户端JS渲染页面,requests.get只能拿到空的页面框架,实际推文内容是加载页面后才生成的,静态HTML里根本没有目标元素。
  • 页面结构更新:Twitter的页面类名已经迭代多次,旧的tweet、tweet-link这类选择器早就失效了。
  • 反爬拦截:未登录状态下直接请求用户主页,大概率会被重定向到登录验证页面,返回的HTML里完全没有推文内容。

修复方案

方案1:用Selenium处理动态页面

Selenium可以模拟浏览器加载页面,等JS渲染完成后再解析内容,能解决动态页面的问题:

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

def get_last_tweet_link(username):
    url = f"https://twitter.com/{username}"
    # 这里用Chrome浏览器,需要提前安装对应版本的ChromeDriver并配置环境变量
    driver = webdriver.Chrome()
    driver.get(url)
    
    try:
        # 等待最新推文加载完成,用Twitter当前的推文标识元素定位
        tweet_link = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.XPATH, '//article[@data-testid="tweet"]//time/parent::a'))
        )
        return tweet_link.get_attribute("href")
    finally:
        driver.quit()

if __name__ == "__main__":
    link = get_last_tweet_link("elonmusk")
    print(link)

方案2:用Twitter官方API(推荐)

静态爬取容易被封,官方API更稳定合规,需要先申请Twitter开发者账号获取密钥:

import tweepy

def get_last_tweet_link(username):
    # 替换为你自己的API密钥信息
    API_KEY = "你的API_KEY"
    API_SECRET = "你的API_SECRET"
    ACCESS_TOKEN = "你的ACCESS_TOKEN"
    ACCESS_TOKEN_SECRET = "你的ACCESS_TOKEN_SECRET"

    auth = tweepy.OAuthHandler(API_KEY, API_SECRET)
    auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET)
    api = tweepy.API(auth)

    # 获取用户最新1条推文
    latest_tweets = api.user_timeline(screen_name=username, count=1)
    if latest_tweets:
        return f"https://twitter.com/{username}/status/{latest_tweets[0].id_str}"
    return None

if __name__ == "__main__":
    link = get_last_tweet_link("elonmusk")
    print(link)

注意事项

  • 使用Selenium时,要保证浏览器驱动和浏览器版本匹配,避免启动失败。
  • 官方API有请求频率限制,需遵守Twitter的开发者规范,不要过度请求。
  • 不管用哪种方式,都不要频繁发起请求,防止触发反爬机制导致IP被封禁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 18:22:19