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

使用Selenium和BeautifulSoup爬取NASA Twitter推文不全问题求助

解决Twitter推文爬取不全的问题

问题根源

  • 滚动加载机制:Twitter采用滚动触发加载的模式,初始页面仅显示少量推文,不主动滚动的话,后续内容不会自动加载。你当前仅等待20秒就获取页面源码,只能拿到初始加载的几条内容。
  • 动态Class选择器:你依赖的css-901oao r-1nao33i...这类Class是Twitter动态生成的,随时可能变更,用它定位元素稳定性极差。
  • 固定等待不可靠:time.sleep(20)是固定时长等待,实际加载速度受网络影响,要么等待冗余,要么内容还没加载完成就停止等待。

改进方案

1. 模拟滚动加载更多推文

通过循环滚动页面底部,触发Twitter加载更多内容,直到页面高度不再变化(说明已加载完所有内容),或者达到你需要的滚动次数。

2. 使用稳定的元素定位方式

优先选择语义化属性定位,比如推文容器的data-testid="tweet"属性,这类属性比动态Class更不容易变动。

3. 用显式等待替代固定sleep

利用Selenium的WebDriverWait等待目标元素加载完成,既避免不必要的等待,也能确保元素已就绪。

改进后的代码

from bs4 import BeautifulSoup
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
import time

url = 'https://twitter.com/nasa'

driver = webdriver.Firefox()
driver.get(url)

# 模拟滚动加载更多推文
scroll_pause_time = 2  # 每次滚动后的等待间隔
last_height = driver.execute_script("return document.body.scrollHeight")

# 设置滚动次数,可根据需求调整
for _ in range(5):
    # 滚动到当前页面底部
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    # 等待内容加载
    time.sleep(scroll_pause_time)
    # 检查页面高度是否变化,判断是否已加载完所有内容
    new_height = driver.execute_script("return document.body.scrollHeight")
    if new_height == last_height:
        break
    last_height = new_height

# 显式等待推文元素加载完成
try:
    WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.CSS_SELECTOR, '[data-testid="tweet"]'))
    )
finally:
    pagesource = driver.page_source
    driver.quit()

soup = BeautifulSoup(pagesource, 'lxml')
# 通过data-testid定位推文容器
tweets = soup.find_all('div', attrs={'data-testid': 'tweet'})
for tweet in tweets:
    # 提取推文文本内容
    tweet_text = tweet.find('div', attrs={'data-testid': 'tweetText'})
    if tweet_text:
        print(tweet_text.text.strip())
        print('---分隔线---')

额外提醒

  • 反爬注意:频繁滚动或请求可能触发Twitter的反爬限制,建议适当延长等待时间,不要过度爬取。
  • API替代方案:如果需要长期稳定获取数据,使用Twitter官方API是更合规的选择,能避免被拦截风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 19:45:33