2016-07-26 5 views
1

JSoup CSS/DOMの質問

1. (から:https://www.virustotal.com/en/file/7b6b268cbca9d421aabba5f08533d3dcaba50e0f7887b07ef2bd66bf218b35ff/analysis/

私は絵のテキストを取得したい、Googleの開発者ツールで私は(私は基本的に別の子ノードに入ったということだろうデベロッパーツールでMD5を見つけるためにスパンのが、Jsoupでは異なるようで、唯一「MD5」のテキストを返します)

document.getElementById("additional-info-content").childNodes[1].children[1].childNodes[1].innerHTML

私はそれがJSoup Dを使用して取得するために管理カントom /セレクタ。 (それはこれらの例の両方を与えることが可能なら)


2.

どのように私はJsoupにCSSで子を指定するのですか? 例えば、私は右の写真の行をマークし、青の上にスパンクラスフィールドをクリックし、「コピーセレクター」をクリックします。

#file-details > div:nth-child(2) > div:nth-child(1) > span 

それもそのないと思った、私は、ファイルの詳細を最初のdivとなります唯一の文書でのファイルの詳細、大丈夫、それはそのようにする必要があります言うことができます(?):

#additional-info-content > div:file-details > div:nth-child(2) > div:nth-child(1) > span 

を、私は子供を持つ働くJSoup CSSスクリプトに翻訳するために管理するにはどうすればよいですか? (DOM例のaswellそして可能であれば)


3.

見すると、特定の値/ノードを探していたときにどのように正しい道を見つけるために、どのように良い洞察力はありますか?

基本的に開発者ツールを開き、固有のdivクラス名をクリックし、子ノードのDevTools内のプロパティウィンドウをチェックし、正しいパスが見つかるまで子ノードを掘り下げます...(最初の質問にコピーしたように)

これを見るには良い方法がありますか?

DevToolsコンソールを使用すると、簡単に、 .children [1] .childnodes [3] .children [1]と書くだけで、プロパティを見て、必要な正しい属性が表示されますが、わかりますそれは私が推測する正しい方法ではない?

+2

こんにちは。投稿ごとに1つの質問をお願いします(http://meta.stackexchange.com/questions/222735/can-i-ask-only-one-question-per-post)。また、jsoupはJavaライブラリなので、 'javascript'の代わりに' java'タグを使用する方が良いでしょう。 – Pshemo

+0

あなたの最初の質問と2番目の質問の回答はおそらくhttps://jsoup.org/cookbook/extract-data/selector-syntaxとElement/Elementsのドキュメントにあります(テキストノードを別々に扱うことに興味がある場合はNodeと一緒にいるかもしれません) 。 – Pshemo

+0

質問を編集してさらに2つのスレッドを作成する必要がありますか? そして私はそれを見てきましたが、私はまだ必要なものの正しい値を得ることはできません:(。 –

答えて

1

1)

// connect to url and retrieve source code as document 
    Document doc = Jsoup 
      .connect(url) 
      .userAgent("Mozilla/5.0") 
      .referrer("http://www.google.com") 
      .get(); 

    String md5= doc 

      // use CSS selector to grab only enums which contain md5 
      .select("div#file-details.extra-info > div.enum-container > div.enum:contains(md5)") 

      // use the first element in the result set 
      .first() 

      // use only its text node and ignore the text node of the span 
      .ownText(); 

2)子どもを指定する方法はたくさんあります。 CSSセレクタやjsoupの便利なメソッドのいくつかを使うことができます。

私は次のHTMLからテキストfooを抽出したい場合:本当にHTMLに依存して行くためにどの方法を決める

doc.select("div > span > b").last().ownText(); 

    doc.select("div > span > b").get(1).ownText(); 

    doc.select("div > span:last-child > b").text(); 

    doc.select("div > span:last-child").text(); 

    doc.select("div > span").last().text(); 

    doc.select("div > span").get(1).text(); 

    doc.select("div > span:last-child > b").first().ownText(); 

    doc.select("span > b").last().text(); 

<html> 
<body> 
    <div> 
    <span><b>foo</b></span> 
    <span><b>bar</b></span> 
    </div> 
</body> 
</html> 

これらのそれぞれは、同じ結果を生成しますあなたが解析しているドキュメントの構造。より多くの例については、CSS Selectorsを参照してください。


3)ブラウザで表示されるコードではなく、ソースコードを調べます。 JsoupはJavaScriptを起動しません。ページのDOMがonLoadに変更されている場合、ページを解析する前にレンダリングする必要があります。これを行う方法の例を次に示します。https://stackoverflow.com/a/38572859/1176178

+0

私はまだ私が画像で指摘したコード: テキスト自体がスパン/要素の外にあるからですか? Googleの開発ツールでは、私はMD5の子どもたちに行ってもらえますが、JSoupではできないそれを行うネージ:(。 –

+0

@ ShlomiBazel質問1への私の回答を編集しました。あなたが取り組んでいるサイトは特定のユーザーエージェントに限られているようです。私はそれをMozillaに設定し、md5ハッシュをプルダウンすることができました。 –

+0

ありがとう、ありがとう。 –