如何抓取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标签中,这个要如何解析呢?
image.png

阅读 1.5k
1 个回答

你参考一下这个实现吧

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();
    }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题