15

Groovy で Web ページを解析し、すべての href リンクとそれに関連するテキストを抽出したいと考えています。

ページに次のリンクが含まれている場合:

<a href="http://www.google.com">Google</a><br />
<a href="http://www.apple.com">Apple</a>

出力は次のようになります。

Google, http://www.google.com<br />
Apple, http://www.apple.com

Groovyの答えを探しています。別名。簡単な方法!

4

7 に答える 7

17

整形式の XHTML を想定して、xml を丸呑みし、すべてのタグを収集し、「a」タグを見つけて、href とテキストを出力します。

input = """<html><body>
<a href = "http://www.hjsoft.com/">John</a>
<a href = "http://www.google.com/">Google</a>
<a href = "http://www.stackoverflow.com/">StackOverflow</a>
</body></html>"""

doc = new XmlSlurper().parseText(input)
doc.depthFirst().collect { it }.findAll { it.name() == "a" }.each {
    println "${it.text()}, ${it.@href.text()}"
}
于 2008-10-02T18:18:55.827 に答える
4

簡単な Google 検索で、 TagSoupという見栄えの良い可能性が見つかりました。

于 2008-09-19T03:28:55.173 に答える
2

私は Java を知りませんが、1 つ (または複数) の html 要素を取得するには、従来の正規表現よりも xpath の方がはるかに優れていると思います。

また、書きやすく、読みやすくなっています。

<html>
   <body>
      <a href="1.html">1</a>
      <a href="2.html">2</a>
      <a href="3.html">3</a>
   </body>
</html>

上記の html では、この式 "/html/body/a" はすべての href 要素を一覧表示します。

これはステップバイステップのチュートリアルですhttp://www.zvon.org/xxl/XPathTutorial/General/examples.html

于 2008-09-19T07:14:56.270 に答える
1

XMLSlurper を使用して HTML を XML ドキュメントとして解析し、find メソッドを適切なクロージャーと共に使用してタグを選択し、GPathResult で list メソッドを使用してタグのリストを取得します。その後、テキストを GPathResult の子として抽出できるはずです。

于 2008-09-19T03:52:34.633 に答える
0

XMlSlurper を使用した解析は、HTMl が整形式の場合にのみ機能します。

HTMl ページに整形式でないタグがある場合は、正規表現を使用してページを解析します。

元:<a href="www.google.com">

ここで、'a' は閉じていないため、整形式ではありません。

 new URL(url).eachLine{
   (it =~ /.*<A HREF="(.*?)">/).each{
       // process hrefs
   }
}
于 2012-04-05T07:39:28.870 に答える
0

正規表現を試してください。このようなものが動作するはずです:

(html =~ /<a.*href='(.*?)'.*>(.*?)<\/a>/).each { url, text -> 
    // do something with url and text
}

Groovy - チュートリアル 4 - 正規表現の基礎アンカー タグの正規表現の破壊 をご覧ください。

于 2008-09-19T03:41:42.677 に答える
-2

Html パーサー + 正規表現 どの言語でもできますが、Perl が最速のソリューションだと思います。

于 2008-10-02T18:34:04.213 に答える