使用Beautiful Soup提取Udemy课程价格时遇NoneType错误的解决方法
Udemy课程价格追踪器:解决BeautifulSoup提取价格的NoneType错误
你遇到的错误核心原因有两个:
- 代码里指定的
usd-sr-only类名和实际页面的ud-sr-only不符 - 即便找对类名,这个标签对应的是
Current price提示文本,并非你需要的价格数值
从你提供的HTML结构来看,价格数值在带data-purpose='course-price-text'属性的父div下的第二个span标签中,该span没有专属class。
正确定位方式
通过父元素的data-purpose属性精准定位容器,再从中提取价格:
- 先找到包含价格的父容器div
- 从容器内筛选出价格对应的span标签
修改后的代码片段
将原代码中价格提取的部分替换为以下内容:
# 定位价格所在的父容器 price_container = soup.find("div", attrs={"data-purpose": "course-price-text"}) if price_container: # 获取容器内所有span标签,取第二个即为价格 price_spans = price_container.find_all("span") price_text = price_spans[1].get_text() # 去除$符号并转换为浮点数 price_as_float = float(price_text.replace("$", "")) print(price_as_float) else: print("无法定位价格元素,请检查页面结构或请求头配置")
额外注意点
- 增加
price_container的存在判断,能避免再次触发NoneType错误 - 如果后续仍提取失败,需留意Udemy是否启用了反爬机制(比如需要登录验证或动态渲染页面)
内容的提问来源于stack exchange,提问作者astral monké
相关产品推荐
相关产品推荐

