2016-08-12 6 views
1

Мне нужно разобрать текст с веб-страницы. Текст представлен следующим образом:Как разобрать HTML-текст и ссылки с java и jsoup

nonClickableText= link1 link2 nonClickableText2= link1 link2 

Я хочу, чтобы иметь возможность конвертировать все в строку в java. Текст без клика должен оставаться таким, каким он есть, в то время как текст с текстом должен быть заменен его фактической ссылкой.

Так в Java я бы это:

String parsedHTML = "nonClickableText= example.com example.com nonClickableText2= example3.com example4.com"; 

Вот несколько фотографий: firstsecond

+2

Ваши требования не ясны. Пожалуйста, укажите точный ввод и вывод. – SomeDude

ответ

0

Что именно link1 и link2? По вашему примеру

"... nonClickableText2 = example3.com example4.com"

они могут быть разными, так что было бы источником кроме href?

Основываясь на ваших изображениях, следующий код должен дать вам все, чтобы принять окончательную строку. Сначала возьмите <strong> -блок, а затем пройти через дочерние узлы, используя <a> -дети с предшествующими текстовые узлы:

String htmlString = "<html><div><p><strong>\"notClickable1\"<a rel=\"nofollow\" target=\"_blank\" href=\"example1.com\">clickable</a>\"notClickable2\"<a rel=\"nofollow\" target=\"_blank\" href=\"example2.com\">clickable</a>\"notClickable3\"<a rel=\"nofollow\" target=\"_blank\" href=\"example3.com\">clickable</a></strong></p></div></html>"; 

Document doc = Jsoup.parse(htmlString); //can be replaced with Jsoup.connect("yourUrl").get(); 
String parsedHTML = ""; 

Element container = doc.select("div>p>strong").first(); 

for (Node node : container.childNodes()) { 
    if(node.nodeName().equals("a") && node.previousSibling().nodeName().equals("#text")){ 
     parsedHTML += node.previousSibling().toString().replaceAll("\"", ""); 
     parsedHTML += "= " + node.attr("href").toString() + " "; 
    } 
} 
parsedHTML.trim(); 

System.out.println(parsedHTML); 

Выход:

notClickable1= example1.com notClickable2= example2.com notClickable3= example3.com 
+0

Большое спасибо, с небольшой настройкой, я смог заставить ее работать. Но мой ответ по-прежнему частично не задан: если у меня есть URL-адрес страницы, как я могу позволить программе захватить блок ? – drogaleggera

+0

Если контент не сгенерирован с помощью javascript, вы можете захватить сайт с помощью: 'Document doc = Jsoup.connect (" yourUrl "). Get();' –

+0

Если это динамически созданный контент, вам нужно будет использовать что-то вроде htmlunit , Я также рекомендую новые записи документации в отношении jsoup: http://stackoverflow.com/documentation/jsoup/topics. –

Смежные вопросы