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

如何用HTMLUnit提取Udemy网站<div data-module-*>内的HTML元素?

爬取Udemy搜索课程内容的问题

问题背景

我尝试从Udemy爬取Selenium相关课程的内容(如课程缩略图、价格等),使用指定搜索URL。查看网站源码时,发现一个class为ud-app-loader ud-component--search--search的div,代码片段如下:

<div class="ud-main-content">
<div class="ud-app-loader ud-component--search--search" data-module-id="search" data-module-args="{"subsCollectionIds":null,"showSRPRefundNotice":false,"showUserEnrollmentProgress":false,"showCodingExerciseCount":false,"enableLabsInPersonalPlan":false,"enableLectureBottomDrawerOnSRP":false,"showCodingExercisesBadge":false,"enableLectureDiscoveryUnitInUb":false,"disableRelatedTopicsOnSRP":false,"enableActiveLearningElementIcons":false}"></div>
</div>

但在浏览器检查窗口中,该div下存在多个对应课程的子div(每个课程对应<div class="popper-module--popper--2BpLn">)。参考类似问题后,我推测数据通过AJAX加载,但无法找到对应的请求URL。

最初计划使用Jsoup爬取,但Jsoup仅为HTML解析器,无法处理异步请求,因此改用HTMLUnit,代码实现如下:

public class Scraper {
    public static void getData(String courseName,String sortType) throws Exception {
        String URL="https://www.udemy.com/courses/search/?lang=en&price=price-paid&q="+courseName+
                "&ratings=4.5&sort=relevance&sort="+sortType+"&src=ukw";
        
        WebClient client=new WebClient(BrowserVersion.FIREFOX);
        client.getOptions().setJavaScriptEnabled(true);
        client.getOptions().setCssEnabled(true);
        client.getOptions().setThrowExceptionOnScriptError(false);
        client.setAjaxController(new NicelyResynchronizingAjaxController());


        HtmlPage page=client.getPage(URL);
        client.waitForBackgroundJavaScript(50000);
        System.out.println(page.asXml());
    }
}

目前我优先获取包含所需内容的完整HTML页面,尚未进行元素过滤,存在以下疑问:

疑问

  • 若数据通过AJAX请求加载,如何找到对应的请求URL?后续如何获取该ud-app-loader div的子元素?
  • 若并非AJAX加载,实际情况是什么?如何提取该data module中的数据?换用其他工具也可接受。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 11:47:38