Очистка сети с помощью Java и загрузка видео - PullRequest
1 голос
/ 26 апреля 2019

Я пытаюсь удалить эту 9gag ссылку

Я пытался использовать JSoup, чтобы получить этот HTML тег для получения ссылки на источник и загрузки видео напрямую.

Я пытался с этим кодом

    public static void main(String[] args) throws IOException {
        Response response= Jsoup.connect("https://9gag.com/gag/a2ZG6Yd")
                   .ignoreContentType(true)
                   .userAgent("Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0")  
                   .referrer("https://www.facebook.com/")
                   .timeout(12000) 
                   .followRedirects(true)
                   .execute();

        Document doc = response.parse();
        System.out.println(doc.getElementsByTag("video"));
    }

, но я ничего не получил

Я пытался тогда это

    public static void main(String[] args) throws IOException {
        Response response= Jsoup.connect("https://9gag.com/gag/a2ZG6Yd")
                   .ignoreContentType(true)
                   .userAgent("Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0")  
                   .referrer("https://www.facebook.com/")
                   .timeout(12000) 
                   .followRedirects(true)
                   .execute();

        Document doc = response.parse();
        System.out.println(doc.getAllElements());
    }

, и я заметил, что в HTMLнет тега, который я ищу, как будто страница загружается динамически, а тег "видео" еще не загружен

Что я могу сделать?Спасибо всем 101

1 Ответ

0 голосов
/ 27 апреля 2019

Давайте изменим подход. Вы уже знаете, что мы ищем URL как https://img-9gag-fun.9cache.com/photo/a2ZG6Yd_460svvp9.webm (Чтобы получить URL-адрес видео, вы также можете щелкнуть его правой кнопкой мыши в Chrome и выбрать «Копировать видео-адрес»).

Если вы ищете источник страницы, вы найдете a2ZG6Yd_460svvp9.webm, но он хранится в JSON внутри <script>.

enter image description here

Это не очень хорошая новость для Jsoup, потому что она не может быть проанализирована, но мы можем использовать простое регулярное выражение, чтобы получить эту ссылку. URL экранирован, поэтому мы должны удалить обратную косую черту. Затем вы можете использовать Jsoup для загрузки файла.

    public static void main(String[] args) throws IOException {
        Document doc = Jsoup.connect("https://9gag.com/gag/a2ZG6Yd").ignoreContentType(true)
                .userAgent("Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0")
                .referrer("https://www.facebook.com/").timeout(12000).followRedirects(true).get();

        String html = doc.toString();

        Pattern p = Pattern.compile("\"vp9Url\":\"([^\"]+?)\"");
        Matcher m = p.matcher(html);
        if (m.find()) {
            String escpaedURL = m.group(1);
            String correctUrl = escpaedURL.replaceAll("\\\\", "");
            System.out.println(correctUrl);
            downloadFile(correctUrl);
        }
    }

    private static void downloadFile(String url) throws IOException {
        FileOutputStream out = (new FileOutputStream(new File("C:\\file.webm")));
        out.write(Jsoup.connect(url).ignoreContentType(true).execute().bodyAsBytes());
        out.close();
    }

Также обратите внимание, что vp9Url не единственный там, так что, возможно, другой будет более подходящим, например h265Url или webpUrl.

...