Здравствуйте. Есть необходимость исследовать большое количество html документов, решил использовать популярную библиотеку Jsoup (Поправьте пожалуйста, если уже на этом шаге допустил ошибку и есть библиотека получше).
Проблема заключается в следующем:
Рассматриваемые Html файлы находятся не совсем в нормальном виде, в самом начале файла, до находится запись с URL адреса, откуда был скачан файл + разделителя (|||), т.е. имеют примерно такой вид:
http://www.13abc.com/weather |||
<!DOCTYPE html>
<html>
<head></head>
<body><body>
</html>
При подаче в таком составе Jsoup парсит его неправильно, получаю результат в таком виде:
Document doc = Jsoup.parse(new File("C:\\test\\27.html"), "UTF-8");
System.out.println(doc.html
<html lang="en">
<head></head>
<body>
https://stascarz.com/firstPage/buyCar |||
<meta charset="UTF-8">
<title>Buy buy cheap car in Toronto</title>
<meta name="viewport">
<meta name="description" content="if you want to buy cheap and good car, please call to us">
<meta name="keywords" content="cheap, buy, car, in , toronto">
<meta property="og:type" content="video.movie">
<link rel="canonical" href="">
<h1>h11 car buy</h1>
<h1>h12 car</h1>
<h2>h22</h2>
<h3>h33 buy cheap car</h3>
<strong>strong1 buy</strong>
<strong>strong2 car</strong>
<strong>strong3 cheap car</strong>
<b>b1 car</b>
<script src="https://www.google-analytics.com/analytics.js"></script>
<div itemscope="schema.org"></div>
<a href="twitter.com"></a>
<a href="stascarz.com/1" rel="dofollow"></a>
<a href="stascarz.com/1" rel="nofollow"></a>
<a href="stascarz.com/1"></a>
<a href="stascarz.com/1"></a>
<a href="another.com/1" rel="nofollow"></a>
<a href="another.com/1" rel="dofollow"></a>
<a href="another.com/1"></a>
</body>
</html>
То есть, Jsoup распределяет содержимое head и URL в начале файла как часть body.
Убрав с начала URL и разделитель, что не удивительно, результат получается нормальный, правильный.
Нашел такое решение:
doc = Jsoup.parse(new File("C:\\test\\27.html"), "UTF-8");
Document newDoc = Jsoup.parse(doc.html().substring(doc.html().indexOf("|||") + 3));
System.out.println(doc.html());
В таком случае, вырезая тот самый URL также получается нормальный, здоровый вывод, но так есть необходимость парсить файл Jsoup'ом 2 раза, файлов очень много, соответственно, следуют беспокоиться о каждом действии.
Буду рад увидеть любой дельный комментарий и готов к тому, что упускаю какое-то элементарное решение.
Спасибо за внимание!