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

使用Selenium驱动滚动页面获取指定数量Reddit帖子失败求助

解决Reddit页面无法滚动加载更多帖子的问题

问题原因

  1. Reddit的动态内容加载依赖特定滚动容器,直接滚动document.body可能无法触发加载逻辑
  2. 单次滚动不足以加载足够内容,需要循环滚动直到获取目标数量的帖子
  3. 固定时长sleep无法适配网络加载速度,应该用显式等待判断新内容是否加载完成

修正方案

1. 滚动到页面最后一个帖子位置

每次滚动到当前页面最后一个帖子的底部,触发Reddit的自动加载机制,而非直接滚动到body高度。

2. 使用显式等待替代固定sleep

等待新的帖子元素加载完成,避免因网络延迟导致的内容未加载。

3. 循环滚动直到达到目标帖子数量

设置目标帖子数,循环执行滚动+等待,直到提取到的标题数量满足需求。

完整修正代码

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
from selenium.webdriver.chrome.service import Service
from bs4 import BeautifulSoup
import time

# 设置爬取URL
url = 'https://www.reddit.com/r/Fitness/'
# 启动浏览器
ser = Service('chromedriver/chromedriver')
driver = webdriver.Chrome(service=ser)
driver.get(url)

# 目标帖子数量
target_post_count = 50
wait = WebDriverWait(driver, 10)

while True:
    # 获取当前所有帖子标题元素
    current_titles = driver.find_elements(By.CSS_SELECTOR, 'h3._eYtD2XCVieq6emjKBH3m')
    if len(current_titles) >= target_post_count:
        break
    
    # 滚动到最后一个帖子的位置
    last_post = current_titles[-1]
    driver.execute_script("arguments[0].scrollIntoView({behavior: 'smooth'});", last_post)
    
    # 等待新帖子加载(等待标题元素数量增加)
    try:
        wait.until(lambda d: len(d.find_elements(By.CSS_SELECTOR, 'h3._eYtD2XCVieq6emjKBH3m')) > len(current_titles))
    except:
        # 超时后退出循环,避免无限等待
        print("无法加载更多帖子,退出循环")
        break
    # 额外添加短暂等待,避免触发反爬
    time.sleep(1)

# 获取页面HTML并解析
html = driver.page_source
soup = BeautifulSoup(html, 'lxml')

# 提取标题
titles = [h3.text for h3 in soup.find_all('h3', {'class': "_eYtD2XCVieq6emjKBH3m"})]
print(f"提取到的帖子数量:{len(titles)}")
print(titles[:target_post_count])

driver.quit()

额外注意事项

  • 如果遇到登录弹窗,可在滚动前添加代码关闭弹窗(定位弹窗的关闭按钮并点击)
  • Reddit存在反爬机制,避免过快滚动,可在每次滚动后添加短暂等待
  • 元素class可能随网站更新变化,若提取失败需检查最新的元素选择器

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 20:54:15