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

如何使用BeautifulSoup从指定根元素快速获取多层嵌套的目标<a>标签?

使用BeautifulSoup快速定位嵌套的标签

既然你已经定位到了cust-attrib-id="root"的根元素,其实完全可以用CSS选择器的层级语法直接一步到位,既快捷又能保证查询的精准性(避免页面其他地方的region-title干扰)。

最简实现方式

首先建议用select_one直接获取单个根元素(如果页面只有一个root节点的话,比select返回列表更方便):

from bs4 import BeautifulSoup

soup = BeautifulSoup(source, "html.parser")
root = soup.select_one('div[cust-attrib-id="root"]')

然后直接在根元素上使用层级选择器,精准定位目标<a>标签:

# 获取所有符合条件的<a>标签的文本内容
city_names = [a.get_text(strip=True) for a in root.select('div[cust-attrib-id="country"] div[cust-attrib-id="region-title"] a')]

执行后city_names就会得到['Frankfurt', 'Braunschweig', 'Hamm', ...]这样的结果。

选择器说明

这个选择器的逻辑是:

  • 从root元素的子树开始查找
  • 先定位到cust-attrib-id="country"的<div>
  • 再找到它下面所有cust-attrib-id="region-title"的<div>
  • 最后取出这些<div>里的<a>标签

这样的层级嵌套完全符合你的需求,既跳过了手动逐层遍历的繁琐,又通过限定父级节点避免了误选页面其他位置的region-title元素。

备选链式查找方式

如果你更习惯用BeautifulSoup的find_all链式调用,也可以这样写:

city_names = []
# 只在root下查找region-title的div
for region_div in root.find_all('div', attrs={'cust-attrib-id': 'region-title'}):
    a_tag = region_div.find('a')
    if a_tag:
        city_names.append(a_tag.get_text(strip=True))

不过相比之下,CSS选择器的写法更简洁直观。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 06:54:53