Frage

Ich möchte eine Webseite in Groovy analysieren und alle href-Links und den zugehörigen Text damit extrahieren.

Wenn die Seite diese Links enthielt:

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

Die Ausgabe wäre:

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

Ich suche nach einer Groovy-Antwort.AKA.Der einfache Weg!

War es hilfreich?

Lösung

Unter der Annahme, wohlgeformte XHTML, die XML-schlürfen, alle Tags Sammeln, findet die 'a' Tags und aus dem href und Text drucken.

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()}"
}

Andere Tipps

Eine schnelle Google-Suche wandte sich eine gut aussehende Möglichkeit auf, tagsoup .

Ich weiß nicht, Java, aber ich denke, dass XPath als klassische reguläre Ausdrücke weit besser ist, um eins zu bekommen (oder mehr) HTML-Elemente.

Es ist auch einfacher zu schreiben und zu lesen.

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

Mit dem html oben, dieser Ausdruck "/ html / body / a" werden alle href Elemente auflisten.

Hier ist ein guter Schritt für Schritt Anleitung http: //www.zvon. org / xxl / XPathTutorial / Allgemein / examples.html

Verwenden XMLSlurper die HTML als XML-Dokument zu analysieren und dann die Methode find mit einem geeigneten Verschluss verwenden, um die eine Tags auswählen und dann auf GPathResult die Liste Methode verwenden, um eine Liste der Tags zu erhalten. Sie sollten dann in der Lage sein, den Text als Kinder des GPathResult zu extrahieren.

Versuchen Sie, einen regulären Ausdruck. So etwas sollte funktionieren:

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

Hier finden Sie aktuelle Groovy - Tutorial 4 - Reguläre Ausdrücke Grundlagen und Chortag Regular Expression Brechen .

Das Parsen mit XMlSlurper funktioniert nur, wenn HTMl wohlgeformt ist.

Wenn Ihre HTML-Seite nicht wohlgeformte Tags enthält, verwenden Sie Regex zum Parsen der Seite.

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

hier ist „a“ nicht abgeschlossen und daher nicht wohlgeformt.

 new URL(url).eachLine{
   (it =~ /.*<A HREF="(.*?)">/).each{
       // process hrefs
   }
}

HTML-Parser + Reguläre Ausdrücke Jede Sprache würde es tun, obwohl ich würde sagen, Perl ist die schnellste Lösung.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top