2017-01-18 2 views
1

< "b">#8(ランダムテキスト)のデータを取得しようとしています。Jsoupクラスまたはタグなしで異なるタグ間で特定のデータを取得する

今私は私が

Document doc = Jsoup.connect(""); 
Elements title = doc.select("div.column.two-third"); 
Element k = title.select("b").get(8); 

を必要とするが、私は、テキストを必要とするTITLEを与えるこのコードを持っています。可能です?


あなたが見ることができるようにデータ

<div class="column two-third"> 

<div style="color:#000000">         

<b>Title I dont want:</b> random text // "b" #0 </br> 

<b>Title i dont want</b> random text // "b" #1 <br> 

<b>Title i dont want:</b> random text // "b" #7 <br> 

**<b>TITLE I WANT :</b> random text // "b" #8 <br>** 

<div align="justify"> <br> <br> <b style="color:#000000">text i dont want</b><br> 

を取得しようとしているウェブサイトのコードイムのサンプルでは、​​私が欲しいのテキストは、また、クラスやIDなし本部でテキストですタグなし( "p")です。私はちょうど#8が必要です。可能です?

答えて

0

はい、可能です:<b>タグの後のテキストはテキストノードにあります。だから、正しい<b>タグをつかむした後、これだけ1

インクリメントしたインデックスにchildNodeがを取得し、あなたが .parent().childNode(int index)と親要素( https://jsoup.org/apidocs/org/jsoup/nodes/Node.html#childNode-int-)内の特定のノードを選択し、 .siblingIndex()であなたの目標 <b>要素のインデックスを与えてみましょうjsoup

サンプルコード

Elements bTags = htmlDocument.select("div.column.two-third > div b"); 

if(bTags.size()>8){ 
    Element title = bTags.get(8); 
    String text = title.parent().childNode(title.siblingIndex()+1).toString(); 
    System.out.println(title.text() + "\n" + text); 
} 

出力

TITLE I WANT : 
random text 
+0

ありがとう、これは実際に私の問題を解決するのに役立ちます。私は "親"、 "子供"、そしてノード要素の使い方を知らないが、これを使ってもう少し理解している。 – MrJaviiPR

+0

@MrJaviiPRクロム開発ツール(f12)を使用する場合、要素タブで要素を選択し、追加パネルをスタイルからプロパティに切り替えてDOMノードの属性を調べ、jsoupが何をしているかを理解するのに役立ちます。また読む:http://www.w3schools.com/jsref/dom_obj_all.asp。したがって、bタグはノードであり、その後のテキストは同じレベル(兄弟)のノードであり、ノードは順序付きリストにあるので、テキストノードのインデックスはbタグのインデックスを1だけ上げたものです。これで少しクリアされることを願っています。 –

+0

ありがとう – MrJaviiPR

関連する問題