我正试图通过搜索通用URL字符串(如下所示),从教育网站Udemy中删除内容(例如课程缩略图、价格等)。该站点的源代码具有类名为"的分区;ud应用程序加载程序ud组件——搜索——搜索";。下面提供了它的片段。
废弃数据的网站(搜索查询为Selenium):Udemy搜索可用的硒课程
<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 class=";ud应用程序加载程序ud组件——搜索——搜索"*>在"检查"窗口中看起来有所不同。它下面有多个子分部(每门课程都有关联的CCD_ 1。
现在,由于我现在还不太熟悉前端技术,但我假设(在阅读了一篇关于stackoverflow的类似文章后,用BeautifulSoup抓取"数据模块组")数据是通过AJAX调用获取的。但我甚至无法在页面中找到AJAX URL。
类似的问题:从<div数据模块组=>使用BeautifulSoup
起初,我计划使用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的AJAX调用,那么我可以在页面中的哪里/如何找到该URL。接下来应该采取什么步骤来获得<div class=";ud应用程序加载程序">
- 如果不是AJAX,那么它实际上是什么?我如何从这个数据模块中提取数据?如果不是HTMLUnit,而是其他一些工具,那么它也很好
如果有人能帮助我,甚至指导我如何获得解决方案,我将非常高兴。
-Abhay。
所以我听说你试图使用HTMLUnit从Udemy的Selenium课程搜索结果页面中抓取数据,但你很难找到正确的信息。这可能是因为数据是通过AJAX调用动态加载的,所以您需要找到负责进行这些调用的URL。
以下是您可以尝试的:当您在Udemy上执行搜索时,使用浏览器中的开发工具来检查网络请求。查找包含所需数据的请求,并查看URL,看看是否可以调整任何参数以提取更多数据。
一旦找到AJAX源URL,就可以使用HTMLUnit模拟AJAX请求,并从响应中提取所需的信息。
如果你仍然被卡住,可能是数据正在使用不同的机制加载。在这种情况下,您可能需要探索其他抓取工具或技术来获得所需的数据。