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

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

  [snip]  [snip] 

取决于您需要构建的Http请求的复杂程度(身份validation等)。 这是我过去看过的一种简单方法。

 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( ""); Matcher matcher = exp.matcher(html.toString()); if(matcher.find()) { System.out.println("Generator: "+matcher.group(1)); } 

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

令人惊讶的是,当解决使用RegEx和HTML的问题时, 没有人面对HTML的问题,因为HTML常常没有格式良好,从而导致许多HTML解析器完全无用。

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

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

您应该使用XPath查询。 它就像获得“/ html / head / meta [@ name = generator] / @ value”的值一样简单。

一个很好的教程: 使用XPath解析XML文档

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

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

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

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

这取决于。

如果要从保证格式正确的HTML的站点中提取信息,并且您知道不会以某种方式进行模糊处理,那么逐行读取部分并应用正则表达式是一个很好的方法。

另一方面,如果HTML可能被破坏或“棘手”,那么你需要使用适当的HTML解析器,可能是像HTMLTidy这样的宽松的解析器。 注意在随机网站上搜索的东西上使用严格的HTML或XML解析器。 你发现很多所谓的HTML实际上都是格式错误的。