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

Python Beautiful Soup:find_next_siblings无法获取论坛全部帖子行

解决论坛爬取第二页帖子丢失的问题

我来帮你排查这个问题!你遇到的情况很常见,大概率是find_next_siblings()的行为逻辑和页面结构的差异导致的。咱们一步步来分析和解决:

可能的原因

  • 页面结构不一致:第一页和第二页的<table class="forumline">内部结构可能存在差异。比如第二页的最后3个<tr>可能被其他标签(比如<div>、<tbody>)包裹,或者不在first_tr的同一个父节点下——find_next_siblings()只会获取同一父元素下的后续兄弟节点,一旦结构嵌套变化,就会漏掉这些节点。
  • 起始节点选择偏差:你通过select('tr')[2]定位first_tr,如果第二页的表头或前置tr数量和第一页不同(比如多了一个分页提示的tr),那first_tr的起始位置就错了,后续的兄弟节点自然会少。
  • 动态加载内容:第二页的最后3条帖子可能是滚动到页面底部后才动态渲染的,你的代码直接请求HTML并解析,没等待动态内容加载完成。

解决方案

方案1:直接获取目标表格下的所有tr(最稳妥)

放弃从某个tr找兄弟节点的方式,直接抓取目标table下的所有tr,再过滤掉不需要的(比如表头):

# 定位目标表格
target_table = page_soup.find_all('table', {'class': 'forumline'})[0]
# 获取表格内所有tr
all_tr = target_table.find_all('tr')
# 根据第一页的结构过滤掉前2个非帖子的tr(如果第二页结构不同,可调整索引)
filtered_tr = all_tr[2:]
# 现在filtered_tr应该包含所有15条帖子的tr了
print(len(filtered_tr))

这种方式能确保你拿到该表格下的所有tr,不会因为兄弟节点的结构问题丢失内容。

方案2:检查页面结构差异

把第二页的HTML源码保存下来(可以用print(page_soup.prettify())输出),对比第一页的结构:

  • 确认第二页的最后3个tr是不是在<table class="forumline">内部
  • 查看first_tr的父节点下,是否有其他元素插入到了tr之间
    如果发现结构差异,调整选择器定位到正确的起始节点,或者直接遍历整个表格的子节点。

方案3:处理动态加载(如果是动态内容)

如果最后3条是动态加载的,需要用Selenium等工具等待页面加载完成再解析:

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

driver = webdriver.Chrome()
driver.get("你的第二页URL")
# 等待所有帖子加载完成(比如等待最后一个tr出现)
WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.CSS_SELECTOR, "table.forumline tr:last-child"))
)
# 获取加载后的页面源码
page_source = driver.page_source
driver.quit()

# 解析源码
page_soup = BeautifulSoup(page_source, 'html.parser')
target_table = page_soup.find_all('table', {'class': 'forumline'})[0]
filtered_tr = target_table.find_all('tr')[2:]
print(len(filtered_tr))

调试小技巧

可以在第二页爬取时,打印这些信息来定位问题:

  • print(len(target_table.find_all('tr'))):看看目标表格下总共有多少个tr
  • print(first_tr.parent.prettify()):查看first_tr的父节点下所有内容,确认后续兄弟节点是否完整

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:37:22