我要做个毕业设计,是网络数据提取的,现在不知道怎么编写程序把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<table.getContentSize();i++){ Element tr=(Element)table.getChildren().get(i); for(int j=0;j<tr.getContentSize();j++){ Element td=(Element)tr.getChildren().get(j); Element input=new Element("input"); if(type==null && id!=null){ if(id.equals(td.getAttributeValue("id"))){ td.addContent(input); input.setAttribute("id",id); input.setAttribute("type","text"); input.setAttribute("size","10"); if(a.getAttribute(HTML.Attribute.WIDTH)!=null){ input.setAttribute("width",a.getAttribute(HTML.Attribute.WIDTH).toString()); }else{ input.setAttribute("width",""); } if(a.getAttribute(HTML.Attribute.STYLE)!=null){ input.setAttribute("style",a.getAttribute(HTML.Attribute.STYLE).toString()); }else{ input.setAttribute("style","text-align:left"); } if(a.getAttribute(HTML.Attribute.VALUE)!=null){ input.setAttribute("value",a.getAttribute(HTML.Attribute.VALUE).toString()); }else{ input.setAttribute("value",""); } if(a.getAttributeCount()>5){ input.setAttribute("readOnly","true"); } } } } } } } } public void handleStartTag(HTML.Tag t, MutableAttributeSet a, int pos) { if (t.equals(HTML.Tag.TABLE)) { Element table=new Element("table"); root.addContent(table); table.setAttribute("id",a.getAttribute(HTML.Attribute.ID).toString()); } if(t.equals(HTML.Tag.TR)){ for(int i=0;i<root.getContentSize();i++){ Element table=(Element)root.getChildren().get(i);//从root中获取每个表对象 Element tr=new Element("tr");// String id=(String)a.getAttribute(HTML.Attribute.ID); String trid=id.substring(3,4);//取出行id String tabid=table.getAttributeValue("id").substring(3,4); if(trid.equals(tabid)){//如果行id和列id相等,满足条件 table.addContent(tr);//添加行 tr.setAttribute("id",id); } } } if (t.equals(HTML.Tag.TD)) { for(int r=0;r<root.getContentSize();r++){ Element table=(Element)root.getChildren().get(r); for(int i=0;i<table.getContentSize();i++){ String id = (String) a.getAttribute(HTML.Attribute.ID); if(id!=null ){ Element td=new Element("td"); Element tr=(Element)table.getChildren().get(i); /**有两张表,tab0表3行4列,tab1表5行4列 * tab(0,1)-------------------tab0---0表一 * row(0,1,2),row(0,1,2,3,4)--row01--01表一,行二 * col(0,1,2,3),col(0,1,2,3)--col011-011表一,行二,列二 */ String tdid=id.substring(3,4);//取出列ID,第四个位置为哪个表 String trid=tr.getAttributeValue("id").substring(3,5);//取出行TD后两位 String tabid=table.getAttributeValue("id").substring(3,4);//取出表ID if(tdid.equals(tabid)){ if(id.substring(3,5).equals(trid)){//取出TD后两位 tr.addContent(td); td.setAttribute("id",id); } } } } } } } }