2017-01-17 6 views
0

jsoupを使ってこのHTMLを解析したいが、クラス名が常に変化するので、クラス名を変更せずに見出しとサブタイトルを抽出する必要がある。私は機能があることを知っている私がコメントします直接親を呼び出さずにHTMLを解析する方法

<header class="my header"> 
    <div class="row"> 
     <h3>I don't want this  </h3> 
     <div class="Changing class name"> 
     <h1>The headline    </h1> 
     <p class=" my subtitle"> 
      The subtitle 
     </p> 
     </div> 
    </div> 
</header> 
+0

JSoupはよく分かりませんが、そのクラスを使用したくない場合は、構造が常に同じであることを確認してから、それらのパス、つまりヘッダーなどの要素にアクセスする必要があります。 div.div.h1'と 'header.div.div.p'(複数のdivがある場合は、おそらく定数インデックスも必要です)。 – Thomas

答えて

0

が、私はできませんまだ

:私はちょうど「H1」属性と「P」

HTMLからのテキストを必要としますあなたが唯一の見出しが<h1>を使用している知っているので、もしあなたが使用することができ、<h1>のすべての要素を取得するために使用することができますgetElementsByTag()この1

あなたにもselect()https://jsoup.org/cookbook/extracting-data/selector-syntax)を選択するために使用することができます見出しや例えば字幕私はあなたがクラスの<p>タグを照会できると仮定して あなたは私たちがこのようにgetElementsByTagを使用することができ、私のサブタイトルこと

+0

ありがとうございます。部分的にうまくいく。私は言及するのを忘れましたが、ときどき私がやっているときにサブタイトルのない記事があります。 String articleSubTitle = doc.getElementsByTag( "p")。get(0).text(); "p"がない場合例外が発生する – Teddy

+0

getElementsByTag()から取得したリストや何かが0より大きいサイズで、get(0)を基にしているかどうかを確認することができます 私は知らないこのサイト全体を解析するのが本当に好きです。静的で間違った感じがしますxD –

+0

それは機能していますか? –

1

を字幕変更のクラスを言いませんでした:

String MyTitle = doc.getElementsByTag("h1").get(0).text(); 

それとも私たちは、このように選択を使用することができます(仕事速い):

String MyTitle = doc.select("my.header h1").first().text().trim(); 

字幕に関しては、私は、文字列にNULLを入力することを避けるためにチェックを追加しました

Element Subtitle = doc.select("p.my").first(); 
if (Subtitle != null) { 
    String MySubtitle = doc.select("p.my").text().trim();} 
関連する問題