15

我想在 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 的答案。又名。最简单的方法!

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

一个快速的谷歌搜索出现了一个漂亮的可能性,TagSoup

于 2008-09-19T03:28:55.173 回答
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

于 2008-09-19T07:14:56.270 回答
1

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

于 2008-09-19T03:52:34.633 回答
0

尝试正则表达式。像这样的东西应该工作:

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

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

于 2008-09-19T03:41:42.677 回答
0

仅当 HTMl 格式正确时,使用 XMlSlurper 进行解析才有效。

如果您的 HTMl 页面包含格式不正确的标签,请使用正则表达式来解析页面。

前任:<a href="www.google.com">

在这里,“a”不是封闭的,因此格式不正确。

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

Html 解析器 + 正则表达式 任何语言都可以,尽管我认为 Perl 是最快的解决方案。

于 2008-10-02T18:34:04.213 回答