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

使用Python BeautifulSoup获取网页href链接无输出问题求解

问题根因

你拿不到链接和a标签嵌套深没有任何关系。
BeautifulSoup的find_all()默认是递归遍历整个DOM树的,哪怕标签嵌套几十上百层,只要存在于你传入的page.content里,就一定能被匹配到。输出为空的核心原因是:requests.get()只能拿到页面初始返回的静态HTML骨架,这个页面的社团列表是JavaScript运行后动态拉取数据、渲染到页面上的,初始响应里根本没有社团对应的a标签,再怎么遍历也找不到内容。

正确解决方法

完全不需要逐层遍历上层元素定位,两种常用方案都可以直接拿到目标链接:

  • 方案1:直接调用站点后端接口(效率最高,最推荐)
    打开浏览器F12开发者工具,切到「网络」面板筛选Fetch/XHR类型的请求,刷新页面就能找到拉取社团列表的接口。这类接口返回的是结构化JSON数据,每个社团的名称、主页链接都在字段里,直接用requests请求这个接口拿数据就行,不需要解析HTML,稳定性比爬渲染后的页面高很多。
  • 方案2:用JS渲染工具加载完页面再解析
    如果懒得找接口,就用Playwright、Selenium这类能模拟浏览器运行JS的工具加载页面,等列表渲染完成后再提取页面源码交给BeautifulSoup解析。解析的时候不需要管嵌套层级,直接按目标a标签的特征筛选即可——所有社团主页的href都有固定的路径前缀,直接匹配这个特征就能过滤出所有目标链接,示例代码如下:
# 依赖安装:pip install playwright beautifulsoup4
# 安装完执行 playwright install chromium 下载浏览器内核
from playwright.sync_api import sync_playwright
from bs4 import BeautifulSoup

with sync_playwright() as p:
    browser = p.chromium.launch(headless=True)
    page = browser.new_page()
    page.goto("待爬取的羽毛球社团列表页地址", wait_until="networkidle")
    # 等待社团列表元素加载完成
    page.wait_for_selector("a[href*='/engage/organization/']")
    page_html = page.content()
    browser.close()

soup = BeautifulSoup(page_html, "html.parser")
club_links = []
for a_tag in soup.find_all("a", href=True):
    href = a_tag["href"]
    # 按社团链接的固定路径特征筛选,排除无关链接
    if href.startswith("/engage/organization/") and href.count("/") == 3:
        full_url = f"https://illinois.campuslabs.com{href}"
        if full_url not in club_links:
            club_links.append(full_url)

print(club_links)

注意:不要无差别遍历所有a标签,页面里有大量导航、功能按钮类的无关链接,按目标元素的独有属性、路径特征筛选才是最高效的做法,和标签嵌套深度没有关联。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 17:42:13