使用jsoup抓取时发现得到的视频链接不是视频本身的真实链接,网上说是因为jsoup只适合抓取静态的,bing上的视频链接是通过js动态生成的,我尝试用了htmlunit去抓取,但是并不能得到结果。。
// [1] 创建 WebClient 对象
WebClient webClient = new WebClient();
// [2] 设置网页解析的内容
WebClientOptions options = webClient.getOptions();
options.setCssEnabled(false);
options.setJavaScriptEnabled(true);
options.setActiveXNative(false);
options.setAppletEnabled(false);
options.setRedirectEnabled(true);
options.setThrowExceptionOnFailingStatusCode(false);
options.setThrowExceptionOnScriptError(false);
options.setDoNotTrackEnabled(false);
options.setGeolocationEnabled(false);
// [2] 搜索关键字和 URL 的格式化
String searchText = "java";
String urlString = "https://cn.bing.com/videos/search?q=" + searchText;
// [3] 访问指定的页面,并将其赋予 HtmlPage
HtmlPage htmlPage = webClient.getPage(urlString);
// [4] 将获取到的 HtmlPage 转换为 Document 对象,以便于使用 Jsoup 解析
Document document = Jsoup.parse(htmlPage.asXml());
System.out.println(document);
// 使用选择器 dg_u
Elements elements = document.select("noscript");
System.out.println(elements);
for (Element element : elements) {
Element title = element.select("a").first();
System.out.println(title.text()); // 获取视频标题
String href = title.attr("href"); // 获取视频链接
System.out.println(href);
}
// [5] 关闭 WebClient
webClient.close();
抓下来的视频链接貌似是在一个noscript标签中,这个要如何解析呢?
你参考一下这个实现吧