使用普通的表达,什么是最简单的方法来取一个网站HTML并找到的价值,在这个标记(或任何特性的价值对于这个问题):

<html>
  <head>
  [snip]
  <meta name="generator" value="thevalue i'm looking for" />
  [snip]
有帮助吗?

解决方案

取决于如何复杂的一个Http请求你需要建立(认证,等等)。这里有一个简单的方法我已经看到过去使用的.

StringBuilder html = new StringBuilder();
java.net.URL url = new URL("http://www.google.com/");
BufferedReader input = null;
try {
    input new BufferedReader(
        new InputStreamReader(url.openStream()));

    String htmlLine;
    while ((htmlLine=input.readLine())!=null) {
        html.appendLine(htmlLine);
    }
}
finally {
    input.close();
}

Pattern exp = Pattern.compile(
    "<meta name=\"generator\" value=\"([^\"]*)\" />");
Matcher matcher = exp.matcher(html.toString());
if(matcher.find())
{
    System.out.println("Generator: "+matcher.group(1));
}

可能大量输入错误在这里被发现时汇编。(希望这并不是功课)

其他提示

它的令人惊讶的是没有人,当解决的问题使用RegEx与HTML,所面临的问题往往HTML 正在形成的,因此呈现了很多HTML分析程序完全无用的。

如果您正在开发的工具来分析网页及其一个事实,即这些都是不好的形成HTML,语句"Regex永远不应该被用来分析HTML"og"使用HTML分析器"只是完全伪造的。事实是,在现实世界中,人们创建HTML,因为他们感觉像并不一定适合用于分析程序.

RegEx 一个完全有效的方式找到元素的文字,因此在HTML。如果有任何其他合理方式来面对问题原始的海报,然后将他们,而不是参照一个"用一个分析器"或"RTFM"的发言。

你应该使用XPath查询。

就这么简单,因为越来越值 /html/head/meta[@name=generator]/@value.

一个很好的教程: 分析XML Document with XPath

你可能需要检查的文件Apache的组织。apache.共用。异常的包装和相关的软件包 在这里,.发送HTTP请求从一个Java应用程序是很容易做到的。戳通过的文件应该让你离开正确的方向。

严格来说你真的不能确定你得到了正确的价值,因为元标记可以评论的了,或者元标记可以大写形式等等。这取决于如何肯定你是得HTML可以被认为是"好的"。

它依赖。

如果你们中提取信息从一个网站或网站,保证良好的成HTML,你知道, <meta> 不会被混淆在一些方法,然后一读的 <head> 第一行一行和施加regex是一个很好的方法。

另一方面,如果HTML可能出错或"棘手的"然后你需要用适当HTML分析器,可能是一个宽容的一个象HTMLTidy.小心使用严格HTML或XML parser上的东西拖网从随机的网站。许多所谓HTML你找到了那里实际上是错误的.

我没有尝试这样做,但不会的基本框架

  1. 打开一个 java.net.HttpURLConnection
  2. 得到的输入流使用 getInputStream
  3. 使用经常表达的迈克的回答的分析出发点你想要的
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top