URL не возвращает правильный HTML на веб-странице (для моего сканера Java)

Я хочу загрузить несколько изображений с веб-страницы, для этого я писал гусеничный механизм. Я протестировал несколько сканеров для этой страницы, но ни один из них не работал так, как я хотел.

На первом этапе я собрал ссылки на 770+ моделей камер (parent_url), тогда я думал о сборе изображений в каждой ссылке (child_urls). Тем не менее, страница организована таким образом, что child_urls возвращают тот же HTML, что и parent_url,

Вот мой код для сбора ссылок с камер:

public List<String> html_compiler(String url, String exp, String atr){
    List<String> outs = new ArrayList<String>(); 
    try {
        Document doc = Jsoup.connect(url).get();

        Elements links = doc.select(exp);
        for (Element link : links) {
            outs.add(link.attr(atr));
            System.out.println("\nlink : " + link.attr(atr));
        }
    } catch (IOException | SelectorParseException e) {
        e.printStackTrace();
    }
    return outs;
}

С помощью этого кода я собираю ссылки

String expCam = "tr[class='gallery cameras'] > td[class='title'] > a[href]";
String url = "https://www.dpreview.com/sample-galleries?category=cameras";
String atr = "href";
List<String> cams = html_compiler(url, exp, atr); // This gives me the links of individual cameras

String exp2 = "some expression";
html_compiler(cams.get(0), exp2, "src"); // --> this should give me image links of the first
                                         //camera but webpage returns same html as above

Как я могу решить эту проблему? Я хотел бы услышать о других страницах, которые классифицировали изображения согласно моделям камеры. (кроме Flickr)

РЕДАКТИРОВАТЬ: например, в Java следующие две ссылки дает тот же HTML.

https://www.dpreview.com/sample-galleries?category=cameras

https://www.dpreview.com/sample-galleries/2653563139/nikon-d1-review-samples-one

1 ответ

Решение

Чтобы понять, как получить ссылки на изображения, важно знать, как страница загружается в браузере. Если щелкнуть ссылку галереи, будет запущен обработчик событий JavaScript. Созданный просмотрщик изображений затем загружает изображения с сервера данных. Ссылки на изображения запрашиваются через javascript и, следовательно, не видны при простом разборе html. URL запроса для ссылок на изображения https://www.dpreview.com/sample-galleries/data/get-gallery чтобы получить изображения в галерее, вы должны добавить идентификатор галереи. Идентификатор галереи предоставляется href атрибут галереи ссылок. Ссылки выглядят как https://www.dpreview.com/sample-galleries/2653563139/nikon-d1-review-samples-one, В этом случае 2653563139 это идентификатор галереи. Воспользуйтесь приведенной выше ссылкой и добавьте идентификатор галереи с помощью ?galleryId=2653563139 до конца URL, чтобы получить объект json, содержащий все данные, необходимые для создания галереи. Ищите url поля в images массив, чтобы получить ваши изображения.

Подвести итоги:

Ссылка, которую вы получаете от href атрибут: https://www.dpreview.com/sample-galleries/2653563139/nikon-d1-review-samples-one

Идентификатор галереи: 2653563139

URL запроса: https://www.dpreview.com/sample-galleries/data/get-gallery

Нужный вам объект json: https://www.dpreview.com/sample-galleries/data/get-gallery?galleryId=2653563139

URL, которые вы ищете внутри объекта json: "url":"https://3.img-dpreview.com/files/p/TS1800x1200~sample_galleries/2653563139/7864344228.jpg"

И, наконец, ссылка на вашу фотографию: https://3.img-dpreview.com/files/p/TS1800x1200~sample_galleries/2653563139/7864344228.jpg

Прокомментируйте, если вы хотите дальнейшего объяснения.

Другие вопросы по тегам