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

使用BeautifulSoup提取指定ul标签课程列表返回空问题

问题根因

你代码返回空列表的核心原因是:requests只能获取页面初始返回的静态HTML文本,而Udacity免费课程页的课程列表是页面加载后通过JavaScript动态拉取数据、渲染生成的内容,初始静态HTML里不存在你要找的class为catalog-v2_results__1FjDi的ul标签。
你在开发者工具里看到的DOM结构是JS执行完成后的最终渲染结果,和requests拿到的原始内容不一致:
HTML结构截图
另外这类带随机哈希后缀(即class末尾的1FjDi字段)是前端构建工具自动生成的,版本更新后就会变化,不适合作为固定定位的选择器。

最简实现方案

直接使用支持JS渲染的爬虫库即可,不需要手动分析接口、写复杂的逆向逻辑,步骤如下:

  • 安装依赖库
pip install requests-html
  • 运行如下代码即可获取目标课程列表
from requests_html import HTMLSession

session = HTMLSession()
resp = session.get("https://www.udacity.com/courses/all?price=Free", verify=False)
# 执行页面JS,等待课程列表渲染完成,首次运行会自动下载适配的Chromium内核
resp.html.render(timeout=20)
# 匹配class以catalog-v2_results开头的ul标签,避开哈希后缀变动的影响
course_list_tag = resp.html.find('ul[class^="catalog-v2_results"]', first=True)
# 提取ul下所有课程li标签
course_items = course_list_tag.find('li')

print(f"共抓取到{len(course_items)}门免费课程")
# 示例:遍历提取课程名称
for course in course_items:
    title = course.find('h2', first=True).text
    print(title)

提示:若render步骤自动下载内核速度过慢,可直接指定本地已安装的Chrome/Edge可执行文件路径加载,无需额外下载资源。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 15:36:23