Jsoup: разная структура документа при загрузке HTML из URL и из файла
Я использую Jsoup для получения данных с сайта. Мне нужно парсить страницу как по URL, так и из локального HTML-файла. Проблема в том, что содержимое объекта Document, полученного с помощью Jsoup.connect() и Jsoup.parse() - разное.
При использовании:
Document pageDocument = Jsoup.connect(pageUrl)
Целевой фрагмент HTML выглядит так:
<div class="rcol" style="width:700px; padding:0 0 0 6px;">
//целевые данные
</div>
Но при использовании:
Document pageDocument = Jsoup.parse(htmlFile, "UTF-8", baseUrl)
Этот же фрагмент выглядит как-то так:
<a class="attribute-value">rcol</a>" <span class="attribute-name">style</span>="<a class="attribute-value">width:700px; padding:0 0 0 6px;</a>
Соотвествено, весь мой дальнейший код вида:
getElementsByClass("rcol")
который работает для ссылки, на файле превращается в тыкву, потому что этот же класс теперь называется почему-то не rcol, а attribute-value
ВАЖНО: содержимое HTML-файла, который я скачивал вручную и потом передавал в Jsoup.parse(), полностью (не совсем, см. UPD) идентично HTML, получаемому по ссылке с помощью Jsoup.connect(). Различия появляются уже в выводе Jsoup.parse(). То есть в данном случае проблема не на стороне севера, который возвращает другой файл из-за ругого user-agent, куки и т.п., а именно в работе метода Jsoup.parse(), который искажает HTML при создании объекта Document.
ВОПРОС: как заставить Jsoup.parse() не коверкать HTML?
UPD: заметил, что длина исходного кода страницы в браузере и длина скачаного файла отличается на одну строчку. Похоже, что при скачивании потерялся закрывающий тег или что-то подобное. Попробовал вручную создать HTML-файл, сделав ctrl-c, ctrl-v исходного кода станицы и мое предположение подтвердлилось - созданный таким образом файл обрабатывается корректно.
Я все еще не знаю почему так происходит и хотел бы узнать. Но если вы в будущем читаете этот пост, а ответ так и не был найден - имейте в виду и еще раз перепрверьте структуру HTML.