在HTML(Java)中查找值的快速方法
使用正则表达式,最简单的方法是获取网站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)); }
编译时可能会发现很多错别字。
(希望这不是家庭作业)
回答
我们可能需要在此处查看Apache的org.apache.commons.HttpClient软件包和相关软件包的文档。从Java应用程序发送HTTP请求非常容易。仔细阅读文档应使我们朝正确的方向前进。
回答
我没有尝试过,但是基本框架不会
- 打开一个java.net.HttpURLConnection
- 使用getInputStream获取输入流
- 使用Mike答案中的正则表达式解析出我们想要的内容
回答
严格来说,我们不能真正确定我们获得了正确的值,因为meta标记可能被注释掉了,或者meta标记可能是大写的,依此类推。这取决于我们是否确定HTML可以被视为"很好" "。
回答
我们应该使用XPath查询。
它就像获取" / html / head / meta [@ name = generator] / @ value"的值一样简单。
一个很好的教程:使用XPath解析XML文档
回答
这取决于。
如果我们要从一个或者多个保证格式正确的HTML网站中提取信息,并且知道<meta>不会以某种方式混淆,那么请逐行阅读<head>部分并应用一个正则表达式是一个很好的方法。
另一方面,如果HTML可能混乱或者"混乱",那么我们需要使用适当的HTML解析器,可能是像HTMLTidy这样的宽松解析器。当心在从随机网站抓取的内容上使用严格的HTML或者XML解析器。我们发现那里的许多所谓的HTML实际上是格式错误的。
回答
令人惊讶的是,没有人在解决将RegEx与HTML结合使用时遇到的HTML格式通常格式不正确的问题,从而使许多HTML解析器完全无用。
如果我们正在开发用于分析网页的工具,并且事实证明这些网页不是格式正确的HTML,那么"正则表达式绝不能用于解析HTML"和"使用HTML解析器"这样的说法完全是虚假的。事实是,在现实世界中,人们可以按自己的喜好创建HTML,但不一定适合解析器。
RegEx是一种完全有效的方式来查找文本中的元素,因此可以查找HTML中的元素。如果还有其他合理的方法来解决原始海报所面临的问题,请张贴它们,而不要引用"使用解析器"或者" RTFM"语句。