Как найти URL в HTML с помощью Java - PullRequest
1 голос
/ 30 июля 2010

У меня есть следующее ... Я бы не сказал, проблема, но ситуация.

У меня есть HTML-код с тегами и все такое. Я хочу найти HTML для каждого URL. Я делаю это сейчас, проверяя, где написано «h», «t», «t», «p», но я не думаю, что это отличное решение

Есть хорошие идеи?


Добавлено: я ищу какой-то псевдокод, но на всякий случай я использую Java для этого проекта, в частности

Ответы [ 4 ]

5 голосов
/ 30 июля 2010

Попробуйте использовать библиотеку разбора HTML, а затем найдите теги <a> в документе HTML.

Document doc = Jsoup.parse(input, "UTF-8", "http://example.com/");
Elements links = doc.select("a[href]"); // a with href

не все URL-адреса содержатся в тегах, некоторые являются текстовыми, а некоторые - ссылками или другимитеги

Вы не должны сканировать исходный код HTML, чтобы достичь этого.

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

Лучше всего использовать инструмент, созданный для работы.

Вам следует захватить HTML-теги и указать наиболее вероятные из них, на которых есть «ссылки» (скажем: <h1>, <p>, <div> и т. Д.).Синтаксические анализаторы HTML предоставляют функции, подобные регулярным выражениям, для фильтрации через содержимое тегов, что похоже на вашу логику "начинается с HTTP".

[attr^=value], [attr$=value], [attr*=value]: элементы с атрибутами, которые начинаются с, заканчиваются или содержат значение, например select("[href*=/path/]")

См .: jSoup .

1 голос
/ 30 июля 2010

Возможно, вы захотите взглянуть на XPath или Регулярные выражения .

0 голосов
/ 30 июля 2010

Лучший способ должен быть в Google для регулярных выражений.Вот один пример:

    /^(https?):\/\/((?:[a-z0-9.\-]|%[0-9A-F]{2}){3,})(?::(\d+))?((?:\/(?:[a-z0-9\-._~!$&'()+,;=:@]|%[0-9A-F]{2})))(?:\?((?:[a-z0-9\-._~!$&'()+,;=:\/?@]|%[0-9A-F]{2})))?(?:#((?:[a-z0-9\-._~!$&'()+,;=:\/?@]|%[0-9A-F]{2})*))?$/i

, найденный в хакерской новостной статье .Насколько я могу следить, это выглядит хорошо.Но, насколько я знаю, формального выражения для этой проблемы нет.Так что лучшее решение - это поискать в Google и выбрать, какой из них соответствует большинству того, что вы хотите.

0 голосов
/ 30 июля 2010

Используйте синтаксический анализатор DOM для извлечения всех тегов <a href> и, при желании, дополнительно просмотрите источник на наличие http: // вне этих тегов.

...