Получение якорной ссылки с помощью Jsoup

Я получаю href с помощью

Jsoup.parse(hrefLink, "").select("a[href]").attr("href")

где hrefLink основан хрефлинк.

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

Данная страница: http://en.wikipedia.org/wiki/Baked_potato

где цитата [10] anchorlink имеет две исходящие ссылки. Я хочу иметь возможность получить их. Как я могу сделать это с помощью Jsoup? Если это невозможно с Jsoup, что еще я могу использовать?

1 ответ

Якоря HTML (и ссылки на фрагменты в целом) указывают только позицию в документе, к которой будет переходить браузер при переходе по якору (по ссылке или напрямую через URL с #fragment); они не "перенаправляют" ни на что. Взаимосвязь между ссылками не закодирована в документе, поэтому Jsoup (или любая другая библиотека) не может определить это вообще. Ваша программа будет нуждаться в семантическом знании страниц, которые она обрабатывает.

В вашем примере из Википедии, после нахождения li#cite_note-10 элемент, вы можете выбрать все дочерние a элементы, а затем использовать absUrl("href") чтобы получить цель ссылки и отфильтровать любые ссылки, которые ссылаются на ту же страницу. (В настоящее время просто проверяю, что href атрибут не начинается с # достаточно, но в целом документ может ссылаться на себя и с полным URL-адресом.) Но это зависит от семантики документа, а не только от его синтаксиса - будущая редизайн Википедии может сместиться туда, где будет указывать ссылка на цитату, чтобы исходящий ссылки больше не являются дочерними для целевой ссылки, и ваш код сломается.

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