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

Java怎的获取一个网页的内容(不是源码,要内容)

2013-04-20 
Java怎样获取一个网页的内容(不是源码,要内容)做项目过程中需要写一个程序获取一个帖子的内容,如这个帖子:

Java怎样获取一个网页的内容(不是源码,要内容)
做项目过程中需要写一个程序获取一个帖子的内容,如这个帖子:下周哪些板块具有补涨行情? 
现在我需要获取这些内容而不是整个网页的源码:

下周哪些板块具有补涨行情?

    盘面回顾 今日大盘小幅低开,盘中震荡上扬,收盘基本在当日最高指数,收于3030点,上涨22点,指数再次收一个光头阳线,KJD/MACD都出现金叉,继续向上发散,技术面全面走强,从成交量来看,今天两市成交2500亿,比较昨日,量能略有萎缩,从板块来看,今日只有航空航天和银行两个行业板块是泛绿的,其他板块全线翻红,涨幅靠前的板块是汽车、通信、有色、造纸、医药电子信息,从个股来看,今天有14只个股涨停,涨停个股大幅增加,像威尔泰(002058)、安拉达、圣莱达(002473)、川大智胜(002253)等中小板个股也开始涨停,说明市场走强以后中小板再次出现活跃,要注意市场风格的转换,今天没有跌停的非ST股票,上涨股票有7成,个股全面开始上涨。

     

    主要消息 在一阵欢腾有力的鼓声之后,中央政治局委员、中共上海市委书记俞正声宣布备受海内外关注的上海迪士尼度假区正式开工。楼市调控政策的出台刚刚告一段落,4月初,国务院派出8个督查组,对16个省贯彻落实国务院房地产市场调控政策措施情况开展专项督查

     

    大盘观点 今日大盘再次以光头阳线报收,显示市场人气再次激发,这样指数已经连续四连阳,走势良好,今日盘面来看出现新的热点汽车、医药和电子信息,由于年初很多地方像北京等地出现汽车摇号挂牌等政策,影响了汽车板块的走强,在大盘连续走强的情况下,一些前期下跌比较多板块个股开始了补涨行情,今天的另一个板块电子信息板块也开始上涨,电子信息是国家鼓励发展的行业,这个版块在这波大盘冲击3000点的过程中,不涨反跌,当前开始一波补涨行情,另外,医药股也是本次行情中涨幅落后于大盘的品种,从中长期来看,医药股很多具有投资价值,所以,在大盘普涨的时候,在选股上,近期可以考虑医药、电子信息、汽车食、品百货等近期涨幅较小的板块,不要再追涨涨幅较大的有色、地产、券商等板块,大盘没有风险,下周估计再次冲击3100点,现在选股是关键,后期抓住这波行情,就在补涨板块。

    找了很多简单的程序获得的都是网页的源码,得不到网页的内容。哪位高手能给个思路?当然,直接给个函数更好。得到合理的解答立马给分,谢谢!
[解决办法]
一般是DIV中的值,你把DIV里面的值取出来,然后用正则表达式去过滤,应该就可以了
[解决办法]
直接请求一个servlet返回一段text/plain  文本即可显示
[解决办法]
先拿到页面的源文件,然后找出你需要的地方的特征然后再把它想办法弄出来
[解决办法]
拿到页面源文件,然后进行解析提取出你要的数据,楼主还是死了那条心,没有针对你这个特定需求的API的。。。。。赶快开工自己写喽
[解决办法]
这个东西简单,这个设计的重点就在于正则表达式,如果你正则表达式用的好,这个设计就迎刃而解了
[解决办法]

引用:
谢谢各位的回答!
看来似乎必须得用正则表达式了,肯定挺复杂的,我还没有好好学过正则表达式。不知道有没有更好的方法?


简单的话可以找生成正则表达式的工具进行简单生成
[解决办法]
网上有专门的生成.net开发工具,固定模块。
[解决办法]
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.MalformedURLException;
import java.net.URL;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.swing.*;

//import org.ictclas4j.bean.SegResult;   
//import org.ictclas4j.segment.SegTag;

public class WebContent1 
{
 /**
  * 读取一个网页全部内容
  */
  private JList contentpanel;
  private String url;
  private HashMap<String, String> hm;
  WebContent1(JList contentarea,String weburl){
  this.contentpanel=contentarea;
  this.url=weburl;
   hm = new HashMap<String,String>(); 
 
  }


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

 /**
  * 
  * @param s
  * @return 获得网页标题
  */
 public String getTitle(final String s)
 {
  String regex;
  String title = "";
  final List<String> list = new ArrayList<String>();
  regex = "<title>.*?</title>";
  final Pattern pa = Pattern.compile(regex, Pattern.CANON_EQ);
  final 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(final String s)
 {
  String regex;
  final List<String> list = new ArrayList<String>();
  regex = "<a[^>]*href=("([^"]*)"
[解决办法]
\'([^\']*)\'
[解决办法]
([^\\s>]*))[^>]*>(.*?)</a>";
  final Pattern pa = Pattern.compile(regex, Pattern.DOTALL);
  final Matcher ma = pa.matcher(s);
  while (ma.find())
  {
   list.add(ma.group());
  }
  return list;
 }

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


  {
   list.add(ma.group());
  }
  return list;
 }

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

 /**
  * 
  * @param s
  * @return 去掉标记
  */
 public String outTag(final String s)
 {
  return s.replaceAll("<.*?>", "");
 }
 
 public String outTagContent(final String s)
 {
 return s.replaceAll("(<.*?>)&&(^<br>)","");//对内容保留换行
 }

 /**
  * 
  * @param s
  * @return 获取的文章标题及内容
  */
 public HashMap<String, String> getFromSina(final String s)
 {
  final HashMap<String, String> hm = new HashMap<String, String>();
  final StringBuffer sb = new StringBuffer();
  String html = "";
  System.out.println("\n------------------开始读取网页(" + s + ")--------------------");
  try
  {
   html = getOneHtml(s);
  }
  catch (final Exception e)
  {
   e.getMessage();
  }
  // System.out.println(html);
  System.out.println("------------------读取网页(" + s + ")结束--------------------\n");
  System.out.println("------------------分析(" + s + ")结果如下--------------------\n");
  String title = outTag(getTitle(html));
  title = title.replaceAll("_新浪博客", "");
  String tag=getTag(html);
  // Pattern pa=Pattern.compile("<div class="original">(.*?)((\r\n)*)(.*?)((\r\n)*)(.*?)</div>",Pattern.DOTALL);
  // final Pattern pa = Pattern.compile("<div class="original">(.*?)</p></div>", Pattern.DOTALL);
  final Pattern pa = Pattern.compile("<div class="articalContent">(.*?)</div>", Pattern.DOTALL);
  final Matcher ma = pa.matcher(html);
  while (ma.find())
  {
   sb.append(ma.group());
  }
  String temp = sb.toString();
  temp = temp.replaceAll("(<br>)+?", "\n");// 转化换行
  temp = temp.replaceAll("<p><em>.*?</em></p>", "");// 去图片注释
  temp=temp.replaceAll("&nbsp"," ");
  temp=temp.replaceAll("<a .*?</a>", " ");
  
  hm.put("title", title);
  hm.put("content", outTag(temp));


  hm.put(("tag"),tag);
  return hm;

 }
 
 /*****线程同步方法*************/
 /*
 public synchronized  void GetWebContent()
 {
    hm=getFromSina(url);
    String temp="   "+hm.get("content")+"\n";
    WebInfo info;
    /*if(temp.length()>300)
       info=new WebInfo(hm.get("title"),temp.substring(0,300)+"........",hm.get("tag"));
   else
       info=new WebInfo(hm.get("title"),temp,hm.get("tag"));*/
 /*
    info=new WebInfo(hm.get("title"),hm.get("content"),hm.get("tag"));
    DefaultListModel model=(DefaultListModel)contentpanel.getModel();
    model.add(model.getSize(),info);

 }
*/


 /**
  * 
  * @param args
  *            测试一组网页,针对雅虎知识堂
  */
  
  
 public String getTag(final String s)
 {
  String regex;
  String tag = "";
  final List<String> list = new ArrayList<String>();
  regex = "<td class="blog_tag">(.*?)</td>";
  final Pattern pa = Pattern.compile(regex, Pattern.CANON_EQ);
  final Matcher ma = pa.matcher(s);
  while (ma.find())
  {
   list.add(ma.group());

  }
  for (int i = 0; i < list.size(); i++)
  {
   tag = tag + list.get(i);
  };
  tag=tag.replaceAll("<script.*?</script>", " ");//除去script
   
   tag=tag.replaceAll("<.*?>", " ");//除去HTML标签
   tag=tag.replaceAll("标签:", " ");//除去前两个字
   tag=tag.trim();//除去空格
  
  return tag;
 }
 
 //public String GetResult()
 public String replayce(String str)
 {
 String s=str;
 String regex;
 regex="/.*? ";
 s=s.replaceAll(regex, "*");
 return s;
 }
 
 public String SaveContent(String str){
 //System.out.println(str);
     try
    {
     FileOutputStream fos=new FileOutputStream("F:\\学习和工作\\分词技术\\savearticle\\3.txt");
     OutputStreamWriter osw=new OutputStreamWriter(fos);
     String saveString=str.replaceAll("\n","\r\n");
     //System.out.println("保存的是:"+saveString);
     osw.write(saveString);
     osw.flush();
     osw.close();
    }catch(Exception ee)
    {
     ee.printStackTrace();
    }

 return str;
 }
 

 public boolean Sqlinsert(String s){
 boolean b=false;
 System.out.println("进入sql");
 String tag[];


 tag=s.split(" ");
 try
{
    
    System.out.println("进入try");
Class.forName("com.mysql.jdbc.Driver");      //mysql数据库驱动       
            Connection con=DriverManager.getConnection("jdbc:mysql://localhost/test?      " +
         "useUnicode=true&characterEncoding=gbk", "admin", "");//连接数据库
            System.out.println("连接成功");
            for(int i=0;i<tag.length;i++){
                String command="insert into tag(Tag_ID,Tag_tag) values(?,?)";
                PreparedStatement prepared=con.prepareCall(command);
                prepared.clearParameters();
            prepared.setString(1,"0"+i );//此处数据库中为自动增长
            prepared.setString(2, tag[i]);
            prepared.executeUpdate();
            }

            System.out.println("成功");
            b=true;
}
 catch(SQLException ae){}
 catch(ClassNotFoundException cnfe){}
         
 return b;
 }

 
public static void main(final String args[])
 {
   String htmlurl="http://blog.sina.com.cn/s/blog_46e815bb0100i719.html?tj=1"; 
   WebContent1  wc = new WebContent1(null,htmlurl); 
   HashMap<String, String> hm = new HashMap<String,String>(); 
   
   hm =wc.getFromSina(htmlurl); 
   System.out.println("标题: " +hm.get("title")); 
   System.out.println("内容: \n" + hm.get("content")); 
   System.out.println ("标签:"+hm.get("tag"));  
}

这是我们做数据挖掘时的一个测试程序,主要是通过解析网页的标签来获得我想得到的内容,包括你说的正文部分,只要找对标签就可以了
[解决办法]
使用楼上的方法获取源码,使用nekohtml将源码转成xml对象,使用xpath找到你要的内容节点,获取此节点的内容即可

热点排行