|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Java - Regexp java или иной библиотеки для парсинга HTML |
|
Java - Regexp java или иной библиотеки для парсинга HTML
|
Пользователь Сообщения: 146 |
Профиль | Отправить PM | Цитировать
Здравствуйте, встала задача, написать класс , который будет парсить html страницу со, скорее всего кривым кодом ( то есть парсеры типа DOM, я так мыслю отсекаются ) ,
задача, вытянуть из документа все урлы. но вот проблема, самым очевидным решением принял поиск по совпадению с регулярным выражением ( NB у меня опыта практически ноль ) и когда хочу пропарсить с помощью java.util.regexp - не получается составить выражение, а при помощи org.apache.oro.text.regex. получаю java.lang.ArrayIndexOutOfBoundsException, Люди добрые не пагубите помогите найти оптимальный выход их этой ситуации... вот что наваял import org.apache.oro.text.awk.AwkCompiler; import org.apache.oro.text.awk.AwkMatcher; import org.apache.oro.text.regex.MalformedPatternException; import org.apache.oro.text.regex.MatchResult; import org.apache.oro.text.regex.Pattern; import org.apache.oro.text.regex.PatternCompiler; public class Analyzer2 { public ArrayList<String> analyze(String html_body) { ArrayList<String> al = null; String regex = "(http://)*[w]{3}*.*[a-zA-Z0-9].+[a-zA-Z]{1,3}"; PatternCompiler compiler = new AwkCompiler(); Pattern pattern = null; try { pattern = compiler .compile(regex, AwkCompiler.CASE_INSENSITIVE_MASK); } catch (MalformedPatternException mpe) { mpe.printStackTrace(); } AwkMatcher matcher = new AwkMatcher(); while (matcher.contains(html_body, pattern)) { MatchResult result = matcher.getMatch(); la.add(result.toString()); } return al; } } |
|
Отправлено: 21:52, 24-03-2008 |
Ночной странник Сообщения: 4050
|
Профиль | Сайт | Отправить PM | Цитировать Flick
берем tidy, подключаем его, кормим ему ваш не валидный HTML на выходе получаем дом объект, выдираем все ссылки. |
------- Отправлено: 11:01, 25-03-2008 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 146
|
Профиль | Отправить PM | Цитировать Vlad Drakula,
Вот в том-то и дело, что jTidy не скушает не валидный код страницы, а задача стоит выцепить как можно больше урлов, ( а на странице урл же может выводиться скриптом, не обязательно в виде валидной html-ной ссылки ) ( я пытался заюзать и jTidy и Xerces - ничиво не вышло ). Помогите составить regex хоть на чем нибудь......awk perl java |
Отправлено: 11:34, 25-03-2008 | #3 |
Ветеран Сообщения: 3806
|
Профиль | Отправить PM | Цитировать хотя бы так
[Hh][Tt][Tt][Pp]://[^ "']* блоки <script> стоит исключить - там могут быть "обрывки" адресов |
Отправлено: 12:41, 25-03-2008 | #4 |
Ночной странник Сообщения: 4050
|
Профиль | Сайт | Отправить PM | Цитировать Flick
1) тогда бы почему бы вам просто не использовать движок браузера? 2) не знаю как jTidy, но я использую tidy как раз чтобы делать не валидный HTML валидным, tidy конечно не со всем справляется но в большинстве случаев работает на ура. |
|
------- Отправлено: 12:57, 25-03-2008 | #5 |
Пользователь Сообщения: 146
|
Профиль | Отправить PM | Цитировать путь с Tidy - тернистее и длинее, сложнее,
путь с regexp'ом - , оказался быстрее проще ( в общем случае ).... всем спасибо... |
Отправлено: 15:23, 25-03-2008 | #6 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Для чего нужны dll библиотеки или Учимся редактировать dll | Ban_vam_Dam | Флейм | 5 | 31-07-2009 17:41 | |
Подскажыте, плиз, как создать REG фаил с настройками той или иной программы??? | den730 | Автоматическая установка приложений | 2 | 06-11-2006 12:03 | |
Как в программе задать тот или иной приоритет ? | XPurple | Программирование и базы данных | 2 | 22-05-2006 06:11 | |
HTML и JAVA редакторы | Hagakure | Хочу все знать | 60 | 05-02-2002 14:35 |
|