You need to enable JavaScript to run this app. Python 3中BeautifulSoup如何定位reviews->row->row层级的row类元素
优惠活动
大模型
产品
解决方案
定价
更多

Python 3中BeautifulSoup如何定位reviews->row->row层级的row类元素

针对当前解析需求的实现方案

问题根因

你之前写法失效的本质原因是:row是前端栅格框架的通用类名,整页从导航栏、侧边栏到页脚模块都会批量使用这个类,从页面根节点全局搜索div.row,第一个匹配到的元素通常是顶部导航相关的容器,和目标正文区完全没关系。
你要找的内容有固定的DOM层级链路:reviews -> row -> row,必须顺着层级逐级定位,不能跨节点做全局匹配。

具体实现思路

  • 先定位最外层带reviews类的容器,这个类是文章正文区专属的标识,页面里不会出现大量重复,定位准确率极高
  • 从这个reviews容器开始,顺着DOM结构逐层向下找嵌套的row元素,查找时加上recursive=False参数,严格限定只找当前节点的直接子元素,避免层级匹配错位
  • 定位到三层路径终点的row元素后,再提取里面的正文段落、配图、链接等内容即可

可直接复用的参考代码

soup = BeautifulSoup(response.content, "html.parser")

# 定位正文区最外层专属容器
reviews_container = soup.find("div", class_="reviews")

# 严格按DOM层级逐级匹配,限定只查直接子节点避免抓错元素
first_level_row = reviews_container.find("div", class_="row", recursive=False)
target_article_area = first_level_row.find("div", class_="row", recursive=False)

# 示例:提取目标区域内所有非空的正文段落
paragraph_list = target_article_area.find_all("p")
full_article_text = "\n".join(
    [para.get_text(strip=True) for para in paragraph_list if para.get_text(strip=True)]
)

实操注意点

  • 千万不要省略recursive=False参数,如果去掉这个参数,查找逻辑会自动往节点深层递归,很容易匹配到层级不符的row元素
  • 原代码里的变量名cnbeta_article_content和当前解析的站点不匹配,建议顺手改成对应站点的命名,避免后续维护的时候犯迷糊
  • 即使目标row元素带了其他额外的类名(比如row g-0这类栅格附加类),class_="row"的写法依然可以正常匹配,不需要抄下完整的类名字符串做精确字符串匹配
  • 如果需要保留文章内的图片、跳转链接这类富媒体内容,不需要单独写复杂的解析逻辑,直接遍历target_article_area下的对应标签提取属性值即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.27 00:54:05