3

我打算编写一个简单的 J2SE 应用程序来聚合来自多个 Web 源的信息。

我认为,最困难的部分是从网页中提取有意义的信息,如果它不能作为 RSS 或 Atom 提要提供的话。例如,我可能想从 stackoverflow 中提取问题列表,但我绝对不需要那个巨大的标签云或导航栏。

你会建议什么技术/图书馆?

更新/备注

  • 速度并不重要——只要它可以在 10 分钟内解析大约 5MB 的 HTML。
  • 这真的很简单。
4

10 回答 10

3

您可以结合使用 HTMLParser ( http://htmlparser.sourceforge.net/ ) 和 URL#getInputStream() 来解析托管在 Internet 上的 HTML 页面的内容。

于 2008-09-16T11:57:03.713 回答
2

你可以看看 httpunit 是如何做到的。他们使用了几个不错的 html 解析器,一个是 nekohtml。至于获取数据,您可以使用 jdk (httpurlconnection) 内置的内容,或使用 apache

http://hc.apache.org/httpclient-3.x/

于 2008-09-16T11:54:49.647 回答
2

如果您想利用任何结构或语义标记,您可能想探索将 HTML 转换为 XML 并使用 XQuery 以标准形式提取信息。查看IBM developerWorks 文章中的一些典型代码,摘录如下(它们输出的是 HTML,当然,这不是必需的):

<table>
{
  for $d in //td[contains(a/small/text(), "New York, NY")]
  for $row in $d/parent::tr/parent::table/tr
  where contains($d/a/small/text()[1], "New York")
  return <tr><td>{data($row/td[1])}</td> 
           <td>{data($row/td[2])}</td>              
           <td>{$row/td[3]//img}</td> </tr>
}
</table>
于 2008-09-16T12:25:35.173 回答
0

您可以使用nekohtml来解析您的 html 文档。您将获得一个 DOM 文档。您可以使用 XPATH 来检索您需要的数据。

于 2008-09-16T12:31:41.790 回答
0

您是否考虑过利用 RSS/Atom 提要?当内容通常以可消耗的格式提供给您时,为什么要抓取内容?有一些库可用于以您能想到的任何语言使用 RSS,与尝试抓取内容相比,它对页面标记的依赖要少得多。

如果您绝对必须抓取内容,请在标记中查找微格式,大多数博客(尤其是基于 WordPress 的博客)默认都有此功能。还有一些库和解析器可用于从网页中定位和提取微格式。

最后, Yahoo Pipes等聚合服务/应用程序可以为您完成这项工作,而无需重新发明轮子。

于 2008-09-16T13:12:29.693 回答
0

简而言之,您可以解析整个页面并选择您需要的东西(为了速度,我建议查看 SAXParser)或通过修剪所有 HTML 的正则表达式运行 HTML ...您也可以将其全部转换为 DOM,但这会很昂贵,尤其是如果您希望获得不错的吞吐量。

于 2008-09-16T11:51:56.363 回答
0

你似乎想要屏幕刮。您可能希望通过每个源站点的适配器/插件编写一个框架(因为每个站点的格式会有所不同),您可以解析 html 源并提取文本。您可能会使用 java 的 io API 连接到 URL 并通过 InputStreams 流式传输数据。

于 2008-09-16T11:52:13.943 回答
0

如果你想用老式的方式来做,你需要用一个套接字连接到网络服务器的端口,然后发送以下数据:

GET /file.html HTTP/1.0
Host: site.com
<ENTER>
<ENTER>

然后使用Socket#getInputStream, 然后使用 BufferedReader 读取数据,并使用您喜欢的任何内容解析数据。

于 2008-09-16T12:06:24.160 回答
0

如果您的“网络资源”是使用 HTML 的常规网站(而不是像 RSS 这样的结构化 XML 格式),我建议您查看HTMLUnit

这个库虽然是针对测试的,但实际上是一个通用的“Java 浏览器”。它建立在 Apache httpclient、Nekohtml 解析器和 Rhino 之上,以支持 Javascript。它为网页提供了一个非常好的 API,并允许轻松地遍历网站。

于 2008-09-16T13:05:42.957 回答
0

看看这个http://www.alchemyapi.com/api/demo.html

他们返回了相当不错的结果,并且有一个适用于大多数平台的 SDK。不仅是文本提取,它们还进行关键字分析等。

于 2011-01-30T07:41:28.527 回答