如何抓取bing上的视频链接,标题?
使用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标签中,这个要如何解析呢?
回答:
你参考一下这个实现吧
import com.gargoylesoftware.htmlunit.WebClient;import com.gargoylesoftware.htmlunit.WebClientOptions;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.json.JSONObject;
public class BingVideoScraper {
public static void main(String[] args) throws Exception {
WebClient webClient = new WebClient();
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);
String searchText = "java";
String urlString = "https://cn.bing.com/videos/search?q=" + searchText;
HtmlPage htmlPage = webClient.getPage(urlString);
Document document = Jsoup.parse(htmlPage.asXml());
Elements videoElements = document.select(".mc_vtvc");
for (Element videoElement : videoElements) {
Element titleElement = videoElement.select(".mc_vtvc_title").first();
String title = titleElement.text();
System.out.println("Title: " + title);
String metadata = videoElement.attr("m");
JSONObject metadataJson = new JSONObject(metadata);
String videoUrl = metadataJson.getString("p");
System.out.println("Video URL: " + videoUrl);
System.out.println();
}
webClient.close();
}
}
以上是 如何抓取bing上的视频链接,标题? 的全部内容, 来源链接: utcz.com/p/945109.html