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
Прокомментируйте, если вы хотите дальнейшего объяснения.