如何抓取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

回到顶部