题
使用普通的表达,什么是最简单的方法来取一个网站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你找到了那里实际上是错误的.
我没有尝试这样做,但不会的基本框架
- 打开一个
java.net.HttpURLConnection
- 得到的输入流使用
getInputStream
- 使用经常表达的迈克的回答的分析出发点你想要的