在HTML(Java)中快速查找值的方法
使用正则表达式,获取网站HTML并查找此标记内的值(或任何属性的值)的最简单方法是什么:在HTML(Java)中快速查找值的方法,java,html,regex,Java,Html,Regex,使用正则表达式,获取网站HTML并查找此标记内的值(或任何属性的值)的最简单方法是什么: [剪报] [剪报] 取决于您需要构建的Http请求的复杂程度(身份验证等)。这是我以前见过的一种简单方法 StringBuilder html = new StringBuilder(); java.net.URL url = new URL("http://www.google.com/"); BufferedReader input = null; try { input new Buffer
[剪报]
[剪报]
取决于您需要构建的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));
}
StringBuilder html=new StringBuilder();
java.net.URL URL=新URL(“http://www.google.com/");
BufferedReader输入=null;
试一试{
输入新的BufferedReader(
新的InputStreamReader(url.openStream());
字符串HTMLINE;
而((htmlLine=input.readLine())!=null){
appendLine(htmlLine);
}
}
最后{
input.close();
}
Pattern exp=Pattern.compile(
“您可能想查看Apache的org.Apache.commons.HttpClient包和相关包的文档。从Java应用程序发送HTTP请求非常容易。浏览文档会让您走上正确的方向。我没有尝试过这一点,但基本框架不是很简单吗
打开java.net.HttpURLConnection
使用getInputStream
使用Mike答案中的正则表达式解析出所需的位
严格地说,你不能确定你得到了正确的值,因为meta标记可能被注释掉,或者meta标记可能是大写的等等。这取决于你对HTML是否被认为是“好的”有多确定。你应该使用XPath查询
只需获取/html/head/meta[@name=generator]/@value
的值即可
好的教程:视情况而定
如果您正在从一个或多个保证格式良好的HTML站点提取信息,并且您知道不会以某种方式混淆这些信息,那么逐行读取小节并应用正则表达式是一种很好的方法
另一方面,如果HTML可能损坏或“棘手”"然后你需要使用一个合适的HTML解析器,可能是一个像HTMLIDY这样的许可解析器。小心对从随机网站拖网而来的东西使用严格的HTML或XML解析器。你发现很多所谓的HTML实际上是格式不正确的。令人惊讶的是,在解决将正则表达式与HTML一起使用的问题时,没有人会遇到HTML的问题ften不是格式良好,因此使许多HTML解析器完全无用
如果你正在开发分析网页的工具,而事实上这些网页不是格式良好的HTML,那么“永远不应该使用正则表达式来解析HTML”和“使用HTML解析器”这句话完全是假的。事实是,在现实世界中,人们按照自己的想法创建HTML,并不一定适合解析器
正则表达式是在文本中找到元素的一种完全有效的方法,因此在HTML中也是如此。如果有任何其他合理的方法来解决原始海报存在的问题,那么就发布它们,而不是引用“使用解析器”或“RTFM”语句。当Html不是Xml时,您建议我们如何针对Html执行XPath?您不能保证Html可以作为Xml文档加载以进行XPath导航。现在Html DOM是一个很好的工具,但RegEx可以直接工作。问题中的示例显然是XHTML,因此是Xml,因为它具有自我完形填空功能ng标记。如果元标记被注释掉了怎么办?这仍然会读取它。是这样吗?如果元和名称之间有两个空格怎么办?或者一个标签?或者一个换行符怎么办?如果单词生成器没有被引号包围怎么办?因为这些问题和很多其他问题,我建议不要自己写这篇文章,而是找一个库来为你做格式化的HTML更应该是尝试使用适当的解析器而不是正则表达式的原因。正则表达式永远不应该用于解析HTML,句号。
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));
}