如何解析网页并提取所有href链接?

时间:2008-09-19 03:26:36

标签: html parsing groovy

我想在Groovy中解析一个网页,并用它提取所有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的答案。 AKA。简单的方法!

7 个答案:

答案 0 :(得分: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()}"
}

答案 1 :(得分:4)

快速谷歌搜索看起来很漂亮,TagSoup

答案 2 :(得分:2)

我不知道java,但我认为xpath比经典的正则表达式好得多,以获得一个(或多个)html元素。

写作和阅读也更容易。

<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

答案 3 :(得分:1)

使用XMLSlurper将HTML解析为XML文档,然后使用带有适当闭包的find方法选择a标记,然后使用GPathResult上的list方法获取标记列表。然后,您应该能够将文本提取为GPathResult的子项。

答案 4 :(得分:0)

尝试使用正则表达式。这样的事情应该有效:

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

查看Groovy - Tutorial 4 - Regular expressions basicsAnchor Tag Regular Expression Breaking

答案 5 :(得分:0)

使用XMlSlurper进行解析只有在HTMl格式正确时才有效。

如果你的HTMl页面有非格式良好的标签,那么使用正则表达式来解析页面。

例如:<a href="www.google.com">

这里,'a'没有关闭,因此没有很好地形成。

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

答案 6 :(得分:-2)

Html解析器+正则表达式 任何语言都会这样做,不过我会说Perl是最快的解决方案。