代码之家  ›  专栏  ›  技术社区  ›  ansgri

如何从网页(Java)中获取文本?

  •  3
  • ansgri  · 技术社区  · 16 年前

    我计划编写一个简单的j2se应用程序来聚合来自多个web源的信息。

    我认为,最困难的部分是从网页中提取有意义的信息,如果它不能作为rss或atom提要使用的话。例如,我可能想从stackoverflow中提取一个问题列表,但我绝对不需要那个巨大的标记云或navbar。

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

    更新/备注

    • 速度并不重要,只要它能在10分钟内解析大约5MB的HTML。
    • 应该很简单。
    10 回复  |  直到 14 年前
        1
  •  3
  •   jatanp    16 年前

    您可以使用htmlparser( http://htmlparser.sourceforge.net/)in 结合url getinputstream()解析Internet上托管的HTML页面的内容。

        2
  •  2
  •   James Law    16 年前

    你可以看看httpunit是怎么做到的。他们使用两个不错的html解析器,一个是nekohtml。 至于获取数据,您可以使用jdk(httpurlconnection)中内置的what,或者使用apache的

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

        3
  •  2
  •   Joe Liversedge    16 年前

    如果您想利用任何结构或语义标记,您可能需要探索如何将html转换为xml并使用xquery以标准形式提取信息。看一看 this IBM developerWorks article 对于一些典型的代码,摘录如下(它们输出的是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>
    
        4
  •  0
  •   IcePhoenix    16 年前

    简而言之,您可以解析整个页面并选择所需的内容(为了提高速度,我建议您查看saxparser),或者通过修剪所有html的regexp运行html……您还可以将其全部转换为dom,但这将非常昂贵,特别是如果您希望获得一个不错的吞吐量。

        5
  •  0
  •   Graham    16 年前

    你好像想筛选scrape。您可能希望编写一个框架,通过每个源站点的适配器/插件(因为每个站点的格式不同),您可以解析html源并提取文本。您可以使用Java的IO API连接到URL,并通过输入流来传输数据。

        6
  •  0
  •   Vhaerun    16 年前

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

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

    然后使用 Socket#getInputStream ,然后使用bufferedreader读取数据,并使用您喜欢的任何方式解析数据。

        7
  •  0
  •   Alexandre Victoor    16 年前

    你可以使用 nekohtml 分析HTML文档。您将得到一个dom文档。您可以使用xpath来检索所需的数据。

        8
  •  0
  •   Maxim    16 年前

    如果您的“web源”是使用html(而不是rss等结构化xml格式)的常规网站,我建议您看看 HTMLUnit .

    这个库以测试为目标,是一个真正通用的“Java浏览器”。它构建在apache httpclient、nekohtml解析器和rhino上,支持javascript。它为网页提供了一个非常好的api,并允许轻松地遍历网站。

        9
  •  0
  •   Eric DeLabar    16 年前

    你考虑过利用rss/atom订阅源吗?当内容通常以可消费格式提供给您时,为什么要对其进行删减?有一些库可以使用任何你能想到的语言来使用rss,而且它对页面标记的依赖性要比试图删除内容小得多。

    如果你一定要刮内容,找 microformats 在标记中,大多数博客(特别是基于wordpress的博客)默认都有这个功能。还有一些库和解析器可用于定位和提取网页中的微格式。

    最后,聚合服务/应用程序,如 Yahoo Pipes 也许可以为你做这项工作而不必重新发明轮子。

        10
  •  0
  •   VNVN    14 年前

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

    它们返回了相当好的结果,并且对于大多数平台都有一个sdk。不仅是文本提取,而且还进行关键字分析等。