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

如何用BeautifulSoup4获取嵌套HTML中的<a>标签?

解决BeautifulSoup无法提取嵌套标签的问题

问题原因

你代码里用的下划线开头的长类名是动态生成的(Atlassian Confluence页面的这类class会随页面加载变化),根本定位不到目标div,自然输出空列表。

可行解决方案

方案1:直接提取所有有效标签

跳过不稳定的容器定位,直接抓取页面所有带href属性的标签,还能按需过滤:

import requests
from bs4 import BeautifulSoup

url = "https://openfinancebrasil.atlassian.net/wiki/spaces/OF/pages/17368301/DA+API+-+Canais+de+Atendimento"

response = requests.get(url)

if response.status_code == 200:
    soup = BeautifulSoup(response.text, 'html.parser')
    # 只抓取包含href属性的a标签,避免空链接
    all_valid_links = soup.find_all('a', href=True)
    for link in all_valid_links:
        # 提取链接文本和href属性,strip()去除多余空格
        link_text = link.get_text(strip=True)
        link_href = link['href']
        print(f"链接文本: {link_text}, 链接地址: {link_href}")
else:
    print(f"获取页面失败,状态码: {response.status_code}")

方案2:定位稳定的内容容器

查看目标页面源码,发现内容区域在class="ak-renderer-content"的div里,用这个稳定的容器定位后再找标签:

import requests
from bs4 import BeautifulSoup

url = "https://openfinancebrasil.atlassian.net/wiki/spaces/OF/pages/17368301/DA+API+-+Canais+de+Atendimento"

response = requests.get(url)

if response.status_code == 200:
    soup = BeautifulSoup(response.text, 'html.parser')
    # 定位页面核心内容容器
    content_box = soup.find('div', class_='ak-renderer-content')
    if content_box:
        # 提取容器内所有带href的a标签
        target_links = content_box.find_all('a', href=True)
        for link in target_links:
            print(f"链接文本: {link.get_text(strip=True)}, 链接地址: {link['href']}")
    else:
        print("未找到页面内容容器")
else:
    print(f"获取页面失败,状态码: {response.status_code}")

额外提示

如果后续遇到动态渲染的页面(比如需要加载JS才显示内容),requests无法获取动态内容,这时候可以考虑用Selenium或Playwright这类工具模拟浏览器加载页面。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 05:32:45