Android Jsoup, почему я не могу получить правильный sr c из img - PullRequest
1 голос
/ 22 апреля 2020

Я не могу получить правильный img sr c. Это HTML Я хочу получить. Это изображение схемы данных URI.

<img class="rg_i Q4LuWd tx8vtf" src="data:image/jpeg;base64,9j/4AAQSkZJR ~~~ TOO LONG ~~~/Z" data-deferred="1" jsname="Q4LuWd" alt="大阪の保護猫カフェ - SAVE CAT CAFE" data-iml="610.9050000086427" data-atf="true">

И, это мой код.

val url = "https://www.google.com/search?q=cat&sxsrf=ALeKk01jWgnZ1Jwok_XfrhRYTdkwZecETg:1587538774281&source=lnms&tbm=isch&sa=X&ved=2ahUKEwiy3dTluvvoAhUPyosBHQtMAP8Q_AUoAXoECA8QAw&biw=1280&bih=616"

Jsoup.connect(url).get().select("img")

Тогда его результат ниже.

<img class="rg_i Q4LuWd tx8vtf" src="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="  ~~same above~~/>

"data: image / gif; base64, R0lGODlhAQABAIAAAP /////// yH5BAEKAAALALAAAAABAAEAAAICTAEAOw ==" - изображение размером 1px × 1px. Это другое изображение sr c, когда я получаю html от jsoup. Правильный тип изображения - JPEG, но его результат - GIF. Я могу получить другой тег в качестве тега. Поэтому я думаю, что мой код не плохой. Есть ли какие-либо настройки в получении img sr c от Jsoup. Как получить изображение такого же типа sr c.

1 Ответ

0 голосов
/ 24 апреля 2020

Это немного сложно, так как данные, которые вы ищете, находятся внутри тегов script, поэтому вам придется перебирать все теги script.
Далее Вам придется проверять каждый элемент, если он содержит текст jpeg;base64, поскольку jpeg появляется в некоторых других элементах, которые не содержат данных base64.
Я использовал java и eclipse, и у меня были некоторые проблемы с выводом (это слишком долго для ide, и он экранирован, поэтому / отображается как \/, но я уверен, что вы сможете это исправить:

Document doc = Jsoup.connect(url).
            userAgent("Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:75.0) Gecko/20100101 Firefox/75.0").get();
Elements images = doc.select("script");
    for (Element image : images) {
        if (image.html().contains("jpeg;base64")) {
            System.out.println(image.html());
            System.out.println("--------------");
        }
    }

И последнее: добавьте свой userAgent строка запроса, иначе вы можете получить другой ответ от сервера.

...