如何用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
相关产品推荐
相关产品推荐

