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

Python3使用BeautifulSoup4爬取Udemy网站价格返回None如何解决

问题原因

  1. 写死了带动态后缀的类名
    Udemy前端使用CSS模块化构建,你代码里类名中的2npPm属于自动生成的随机后缀,网站代码更新后就会变动,硬写完整类名无法长期匹配到对应节点。
  2. 价格数据未包含在初始静态HTML中
    价格属于营销类动态数据,Udemy大多会在页面加载完成后通过JS异步拉取价格数据,你直接用requests.get获取的初始HTML源码里没有对应的价格DOM节点,自然返回None。
  3. 请求未携带合法身份标识
    Udemy有基础反爬机制,未携带浏览器UA等请求头的爬虫请求,会被返回阉割版页面,不会包含价格相关内容。

解决方法

  1. 优先使用业务属性匹配节点,不要依赖类名
    你要找的价格节点已经有唯一的业务标识属性data-purpose="course-price-text",直接用该属性匹配即可,不需要加类名过滤条件:
# 修改价格匹配代码
searchingprice = bs.find('div', {'data-purpose':'course-price-text'})
  1. 给请求添加模拟浏览器的请求头,避免被反爬拦截:
import requests
from bs4 import BeautifulSoup

url = 'https://www.udemy.com/course/business-analysis-conduct-a-strategy-analysis/'
# 添加请求头
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
}
html = requests.get(url, headers=headers).content
bs = BeautifulSoup(html, 'lxml')
  1. 如果以上修改后还是无法获取价格,说明该页面价格为纯异步加载,可以换用Selenium、Playwright这类模拟浏览器运行的工具,等待页面完全渲染后再提取数据;也可以直接抓浏览器控制台中Udemy加载价格的接口,直接调用接口获取结构化的价格数据,稳定性更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 20:45:03