首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

关于java 分析 网页,该如何处理

2012-01-16 
关于java 分析 网页不用 html parser 的那个包 分析HTML我记得javax.swing.text.html.parser好想可以分析H

关于java 分析 网页
不用 html parser 的那个包 分析HTML

我记得javax.swing.text.html.parser好想可以分析
HTML 的标签中的内容,具体怎么用忘记了

望高手指点一二

[解决办法]
mark~and study~:)
[解决办法]
不知道,帮你顶啦
[解决办法]
听我都没听说过。帮你顶吧。。。。
[解决办法]
得学习正则
[解决办法]
mark
[解决办法]
分析! parser
[解决办法]
这个功能需要对正则的了解比较多,下面是代码,你自己研究下。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class WebContent ...{
/** *//**
* 读取一个网页全部内容
*/
public String getOneHtml(String htmlurl) throws IOException...{
URL url;
String temp;
StringBuffer sb = new StringBuffer();
try ...{
url = new URL(htmlurl);
BufferedReader in = new BufferedReader(new InputStreamReader(url
.openStream(), "utf-8"));// 读取网页全部内容
while ((temp = in.readLine()) != null) ...{
sb.append(temp);
}
in.close();
}catch(MalformedURLException me)...{
System.out.println("你输入的URL格式有问题!请仔细输入");
me.getMessage();
throw me;
}catch (IOException e) ...{
e.printStackTrace();
throw e;
}
return sb.toString();
}

/** *//**

* @param s
* @return 获得网页标题
*/
public String getTitle(String s) ...{
String regex;
String title = "";
List<String> list = new ArrayList<String>();
regex = "<title>.*?</title>";
Pattern pa = Pattern.compile(regex, Pattern.CANON_EQ);
Matcher ma = pa.matcher(s);
while (ma.find()) ...{
list.add(ma.group());
}
for (int i = 0; i < list.size(); i++) ...{
title = title + list.get(i);
}
return outTag(title);
}

/** *//**

* @param s
* @return 获得链接
*/
public List<String> getLink(String s) ...{
String regex;
List<String> list = new ArrayList<String>();
regex = "<a[^>]*href=("([^"]*)"|'([^']*)'|([^\s>]*))[^>]*>(.*?)</a>";
Pattern pa = Pattern.compile(regex, Pattern.DOTALL);
Matcher ma = pa.matcher(s);
while (ma.find()) ...{
list.add(ma.group());
}
return list;
}

/** *//**

* @param s
* @return 获得脚本代码
*/
public List<String> getScript(String s) ...{
String regex;
List<String> list = new ArrayList<String>();
regex = "<script.*?</script>";
Pattern pa = Pattern.compile(regex, Pattern.DOTALL);
Matcher ma = pa.matcher(s);
while (ma.find()) ...{
list.add(ma.group());
}


return list;
}

/** *//**

* @param s
* @return 获得CSS
*/
public List<String> getCSS(String s) ...{
String regex;
List<String> list = new ArrayList<String>();
regex = "<style.*?</style>";
Pattern pa = Pattern.compile(regex, Pattern.DOTALL);
Matcher ma = pa.matcher(s);
while (ma.find()) ...{
list.add(ma.group());
}
return list;
}

/** *//**

* @param s
* @return 去掉标记
*/
public String outTag(String s) ...{
return s.replaceAll("<.*?>", "");
}

[解决办法]
这个功能需要对正则的了解比较多,下面是代码,你自己研究下。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class WebContent ...{
/** *//**
* 读取一个网页全部内容
*/
public String getOneHtml(String htmlurl) throws IOException...{
URL url;
String temp;
StringBuffer sb = new StringBuffer();
try ...{
url = new URL(htmlurl);
BufferedReader in = new BufferedReader(new InputStreamReader(url
.openStream(), "utf-8"));// 读取网页全部内容
while ((temp = in.readLine()) != null) ...{
sb.append(temp);
}
in.close();
}catch(MalformedURLException me)...{
System.out.println("你输入的URL格式有问题!请仔细输入");
me.getMessage();
throw me;
}catch (IOException e) ...{
e.printStackTrace();
throw e;
}
return sb.toString();
}

/** *//**

* @param s
* @return 获得网页标题
*/
public String getTitle(String s) ...{
String regex;
String title = "";
List<String> list = new ArrayList<String>();
regex = "<title>.*?</title>";
Pattern pa = Pattern.compile(regex, Pattern.CANON_EQ);
Matcher ma = pa.matcher(s);
while (ma.find()) ...{
list.add(ma.group());
}
for (int i = 0; i < list.size(); i++) ...{
title = title + list.get(i);
}
return outTag(title);
}

/** *//**

* @param s
* @return 获得链接
*/
public List<String> getLink(String s) ...{
String regex;
List<String> list = new ArrayList<String>();
regex = "<a[^>]*href=("([^"]*)"|'([^']*)'|([^\s>]*))[^>]*>(.*?)</a>";
Pattern pa = Pattern.compile(regex, Pattern.DOTALL);
Matcher ma = pa.matcher(s);
while (ma.find()) ...{
list.add(ma.group());
}
return list;
}

/** *//**

* @param s
* @return 获得脚本代码
*/
public List<String> getScript(String s) ...{
String regex;
List<String> list = new ArrayList<String>();
regex = "<script.*?</script>";
Pattern pa = Pattern.compile(regex, Pattern.DOTALL);
Matcher ma = pa.matcher(s);
while (ma.find()) ...{
list.add(ma.group());
}
return list;
}


/** *//**

* @param s
* @return 获得CSS
*/
public List<String> getCSS(String s) ...{
String regex;
List<String> list = new ArrayList<String>();
regex = "<style.*?</style>";
Pattern pa = Pattern.compile(regex, Pattern.DOTALL);
Matcher ma = pa.matcher(s);
while (ma.find()) ...{
list.add(ma.group());
}
return list;
}

/** *//**

* @param s
* @return 去掉标记
*/
public String outTag(String s) ...{
return s.replaceAll("<.*?>", "");
}

[解决办法]
如果楼主只想从已知类型的网页中提取自己想要的部分的话,比较简单。
比如说从某个网页中盗取下载链接,还是提取网页的摘要文字说明什么的。

1.获取网页内容。
代码参照12楼的方法getOneHtml。

2.按照关键字查询,字符串查询,这个就不用细说了吧。

如果提取内容比较复杂,有各种情况的话,就比较复杂了,但是也可以做,
就是事先定义pattern文件,然后按照定义搜索。

最复杂的是让你的程序彻底理解网页的内容,这个就比较难了,是浏览器的工作对不对。
不过也有对策,据说Java Mozilla Html Parser能满足要求,本人也没有用过,
请参照下面的网页,学会了别忘了把经验说与大家分享噢。

http://www.open-open.com/open231130.htm


[解决办法]
学习,api可以参考下

热点排行