Получение якорной ссылки с помощью 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-адресом.) Но это зависит от семантики документа, а не только от его синтаксиса - будущая редизайн Википедии может сместиться туда, где будет указывать ссылка на цитату, чтобы исходящий ссылки больше не являются дочерними для целевой ссылки, и ваш код сломается.