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

BeautifulSoup中通过.div链式调用时能否加索引或属性筛选获取目标标签

你给出的两种写法都无法拿到目标元素,原因和正确方案如下:

错误写法说明

  • 第一种 item.a.div.div.div.div[2]:
    bs4中Tag对象使用[索引/属性名]语法时,是用于获取标签的属性值,而非子节点。你链式调用最后得到的是class为_1cRBf1的div标签,对它使用[2]相当于查找该标签有没有名为2的属性,完全无法匹配到子元素。
  • 第二种 item.a.div.div.div.div[class="_3VombQ"]:
    该写法不符合Python基础语法,方括号内不支持直接写key=value的表达式,运行会直接抛出语法错误,不可能实现筛选功能。

正确实现方式

方式1:按子节点顺序获取

如果你确定要取当前atag下的第二个div元素(bs4节点索引从0开始计数,所以目标索引为1),可以用find_all先拿到所有子div再索引:

atag = item.a.div.div.div.div
target_div = atag.find_all('div')[1]

如果仅需要匹配直接子div、忽略更深层级的嵌套div,可以加recursive=False参数:

target_div = atag.find_all('div', recursive=False)[1]

方式2:按class属性筛选

更稳妥的方式是直接通过class属性匹配目标元素,避免后续页面结构调整、节点顺序变化导致的取值错误。注意class是Python保留关键字,所以bs4的查询参数要写为class_:

atag = item.a.div.div.div.div
target_div = atag.find('div', class_='_3VombQ')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 09:39:02