日期:2014-05-17  浏览次数:20792 次

用java编写提取html源码的程序
我要做个毕业设计,是网络数据提取的,现在不知道怎么编写程序把html页面的源码提取出来。请大家帮忙。
谢谢
最好是能给我提供个网络数据提取的思路

------解决方案--------------------
我感觉应该是先把网页下载到本地,然后再用字节流读取网页文件。
我写了两个类分别完成相应的功能
第一个类下载网页,我把它放在C盘
Java code

import java.io.BufferedInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

public class Lianxi1 {
    final int BUFFER_SIZE=1024;
    public void saveToFile(String downUrl,String filePath)
    {
       
        HttpURLConnection connect=null;
        BufferedInputStream in=null;
        FileOutputStream file=null;
        byte[] buf=new byte[BUFFER_SIZE];
        int size=0;
       
        try {
               URL url=new URL(downUrl); 
               connect=(HttpURLConnection) url.openConnection();
               connect.connect();  
               in=new BufferedInputStream(connect.getInputStream());

               file=new FileOutputStream(filePath);

               while((size=in.read(buf))!=-1)
               {
                   file.write(buf,0,size);
               }          
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }catch (IOException e) {
            e.printStackTrace();
        }finally
        {
            try {
                  file.close();
                  in.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            connect.disconnect();
        }
       
    }
    public static void main(String[]args){
        Lianxi1 d= new Lianxi1();
        d.saveToFile("http://news.cn.yahoo.com/08-07-/1028/2j9qn.html", "c:\\abc.html");
    }
}

------解决方案--------------------
我有代码可以帮帮LZ,LZ用javascript
function onSave(){
var val=document.body.innerHTML;//取body里Html代码,提交到servlet,用下的方法解析
}
有不明白的可以联系我
Java code

public void startParse(String sHtml,HttpServletRequest request) {
        Document doc=null;
        Element root = null;
        try {
            Reader in = new StringReader("<?xml version=\"1.0\" encoding=\"utf-8\"?><root></root>");
            doc = new SAXBuilder().build(in);
            root=doc.getRootElement();
            ParserDelegator parser = new ParserDelegator();
            HTMLEditorKit.ParserCallback callback = new Callback(root);
            parser.parse(new StringReader(sHtml), callback, true);
                        XMLOutputter outp = new XMLOutputter();//用于输出jdom 文档
                Format format=Format.getPrettyFormat(); //格式化文档
                format.setEncoding("GBK"); //由于默认的编码是utf-8,中文将显示为乱码,所以设为gbk
                outp.setFormat(format);
                                outp.output(doc,System.out);
    }
    }
public class Callback extends HTMLEditorKit.ParserCallback {
        private Document doc;
        private Element root;
        public Callback(Document _doc){
            this.doc=_doc;
        }
        public Callback(Element _root){
            this.root=_root;
        }
        public Document getDoc(){
            return doc;
        }
        public void handleSimpleTag(HTML.Tag t, MutableAttributeSet a, int pos) {
            if (t.equals(HTML.Tag.INPUT)) {
                for(int r=0;r<root.getContentSize();r++){
                String type = (String) a.getAttribute(HTML.Attribute.TYPE);
                Element table=(Element)root.getChildren().get(r);
                String id = (String) a.getAttribute(HTML.Attribute.ID);
                for(int i=0;i<