В комментарии я пообещал @his, что попробую JSoup и сравню его с моим более хакерским кодом стиля «просто поиск> Make <» (который находится в небольшом классе, который я написал под названием HTMLGrabber.) </p>
Во-первых, я обнаружил, что JSoup прост в использовании, он обрабатывает по крайней мере один из паршивых HTML-файлов, которые я тестировал (есть еще три, которые нужно протестировать).Полученный код был по длине похож на код HTMLGrabber.Чуть дольше, но не плохо.И HTMLGrabber не так прост, как я помню, так как я добавил некоторый код unescape / escape, незначительную поддержку атрибутов и т. Д. *
Любой подход "соскоба" в конечном итоге неНадежность, если веб-сайт кардинально меняется.
«Преимущества» кода стиля HTMLGrabber в том, что вы ищете на основе непосредственно содержимого.В примере с автомобильным кодом вы, вероятно, сначала перейдете к «Результаты проверки бесплатного идентификатора автомобиля», затем найдите «> Make <», затем <code>"<td>" и получите текст перед следующим "</td>"
, получив «FORD».Тогда аналогично для "> Model <" и "> Color <".Почему это возможно "преимущество"?Если <em>структура HTML-кода изменится, например, он больше не находится в таблице или добавлено больше строк, этот подход все еще может работать.то есть он «более устойчив» (но все еще далек от совершенства) перед лицом структурных изменений в HTML.
Преимущество подхода JSoup / «настоящий анализатор» состоит в том, что он обрабатывает глупые escape-символы,Кроме того, обычно (по крайней мере, как я бы это написал, YMMV) вы будете следовать структуре HTML, по крайней мере частично, чтобы найти то, что вам нужно.В примере с автомобилем вы бы искали элемент div с классом main_box, затем нашли таблицу, затем строки и т. Д. Этот подход более надежен в условиях изменений content .Например, когда ваш веб-сайт будет выкуплен, а «Результаты проверки бесплатных идентификаторов автомобилей» изменится на «Результаты проверки идентификаторов автомобилей Facebook», это все равно будет работать.(Обратите внимание, что нет ничего идеального, если «main_box» изменится на «primary_box», у вас будут проблемы).
Я понятия не имею, чаще ли контент или структурные изменения происходят на случайных сайтах, которые люди чистят.У кого-нибудь есть статистика или опыт?
Таким образом, я нашел JSoup "достаточно простым", чтобы использовать его большую часть времени в будущем, так как я подозреваю, что в целом он более надежный.Но для многих веб-сайтов подход «просто хватай» может быть лучше.
ADDENDUM Для двух моих веб-страниц HTML-код был настолько перемешан, что, хотя Jsoup удалось проанализировать его, используя Jsoup дляпройти через DOM оказалось так сложно, что я застрял с быстрым и грязным.