Недавно я попытался работать с JSoup для анализа HTML-документов, я прошел через Turorial на JSoup и обнаружил, что select-Method может быть тем, что я ищу.JSoup Выбрать тег Рекурсивный поиск
Что я пытаюсь выполнить, так это найти все элементы в html-документе, которые обладают определенным классом. Чтобы проверить это, я попробовал это на веб-странице Amazon (идея: найти все сделки с определенными предложениями).
Итак, я проверил веб-страницу, чтобы узнать, какие классы и идентификаторы используются, а затем я попытался интегрировать это в небольшой фрагмент кода. В этом примере я нашел follwing элемента:
<span id="dealTitle" class="a-size-base a-color-link dealTitleTwoLine restVisible singleCellTitle autoHeight">PROCAVE Matratzen-Brücke aus Schaumstoff 25 x 200 cm für ...</span>
Этого элемент встроен в других элементах, и существует несколько раз (для каждой сделки, конечно). Итак, вот мой код, чтобы прочитать элементы сделки:
Document doc = Jsoup.connect("https://www.amazon.de/gp/angebote/ref=gbph_ftr_s-8_cd61_page_1?gb_f_LD=dealStates:AVAILABLE%252CWAITLIST%252CWAITLISTFULL%252CUPCOMING,dealTypes:LIGHTNING_DEAL,page:1,sortOrder:BY_SCORE,dealsPerPage:8&pf_rd_p=425ddcb8-bed4-4e85-ac0f-c1a79d14cd61&pf_rd_s=slot-8&pf_rd_t=701&pf_rd_i=gb_main&pf_rd_m=A3JWKAKR8XB7XF&pf_rd_r=BTHRY008J9N3N5CCMNEN&gb_f_second=dealStates:AVAILABLE%252CWAITLIST%252CWAITLISTFULL,dealTypes:COUPON_DEAL,page:8,sortOrder:BY_SCORE,dealsPerPage:8").timeout(0).get();
Elements deals = doc.select("span.a-size-base.a-color-link.dealTitleTwoLine.restVisible.singleCellTitle.autoHeight");
for (Element deal : deals) {
if (deal.text().contains("ItemMatch")) {
System.out.println("Found deal: " + deal.text());
}
}
К сожалению, я не могу получить элемент, который я ищу. сделок всегда имеет размер 0. Я попытался изменить свой выбор только с помощью части классов, добавил атрибут id и так далее. Тем не менее, я не получаю элементы (в этом случае они вложены в некоторые другие). Если я попробую элемент, который находится над этим элементом в иерархии DOM (например, div с классом «a-section a-spacing-none slotContainer»), это будет найдено.
я на самом деле нужно указать всю иерархию DOM (с помощью «>» в моих отборных выражениях делать? Я ожидал, чтобы быть в состоянии определить селектор и JSoup бы траверс и искать все DOM-дерево.
Если на ваш вопрос достаточно ответили, вы должны подумать о том, чтобы принять наилучший ответ и тем самым поставить этот вопрос в соответствие с решением. Если вам нужна дополнительная помощь, укажите, с чем вам нужна помощь. – luksch