在HTML(Java)中查找值的快速方法

时间:2008-08-28 00:28:37

标签: java html regex

使用正则表达式,获取网站HTML并查找此标记内的值(或任何属性的值)的最简单方法是:

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

6 个答案:

答案 0 :(得分:9)

取决于您需要构建的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));
}

编译时可能会发现很多拼写错误。 (希望这不是作业)

答案 1 :(得分:4)

令人惊讶的是,在解决使用RegEx和HTML的问题时,没有人面临HTML的问题,通常 NOT 格式正确,因此很多HTML解析器完全没用。

如果您正在开发分析网页的工具以及这些不是格式良好的HTML的事实,那么“正则表达式永远不应该被用于解析HTML”的语句og“使用HTML解析器”只是完全是假的。事实是,在现实世界中,人们会按照自己的意愿创建HTML,而不一定适合解析器。

RegEx 一种在文本中查找元素的完全有效的方法,因此是HTML格式。如果有任何其他合理的方法来解决原始海报所遇到的问题,则发布它们而不是引用“使用解析器”或“RTFM”声明。

答案 2 :(得分:1)

您应该使用XPath查询。

这就像获取/html/head/meta[@name=generator]/@value的价值一样简单。

一个好的教程:Parsing an XML Document with XPath

答案 3 :(得分:0)

您可能需要查看Apache的org.apache.commons.HttpClient包和相关包here的文档。从Java应用程序发送HTTP请求非常容易。阅读文档应该会让你走向正确的方向。

答案 4 :(得分:0)

我没有试过这个,但基本框架不是

  1. 打开java.net.HttpURLConnection
  2. 使用getInputStream
  3. 获取输入流
  4. 使用Mike的答案中的正则表达式来解析您想要的位

答案 5 :(得分:0)

严格地说,你不能确定你得到了正确的值,因为元标记可能被注释掉,或者元标记可能是大写的等等。这取决于你是多么肯定可以考虑HTML “很好”。