@stanislav_studzinskiy

Как оптимизировать Java Jsoup парсинг HTML документа?

Здравствуйте. Есть необходимость исследовать большое количество 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 раза, файлов очень много, соответственно, следуют беспокоиться о каждом действии.

Буду рад увидеть любой дельный комментарий и готов к тому, что упускаю какое-то элементарное решение.
Спасибо за внимание!
  • Вопрос задан
  • 844 просмотра
Решения вопроса 1
al_gon
@al_gon
Вам нужно обязательно от него (файл + разделителя (|||)) избавиться.

Иначе jsoup приведет его к виду:
<html>
 <head></head>
 <body>
  http://www.13abc.com/weather |||     
 </body>
</html>


P.S.: А так jsoup хороший выбор .
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы