亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? htmlpage.java

?? 利用廣度優先遍歷搜索一定范圍內的所有網頁,可用于建立搜索引擎和查找網絡錯誤.
?? JAVA
字號:
/**
 * Represents an HTML page.
 *
 * @author  SeungJin Lim
 * @version 1.0, 2006/10/20
 * @since   JDK1.5
 */
package html;

import java.net.MalformedURLException;
import java.net.BindException;
import java.net.URL;
import java.net.UnknownHostException;
import java.io.BufferedInputStream;
import java.io.FileNotFoundException;
import java.io.PrintStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Vector;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.w3c.tidy.Tidy;

import WebCrawler.Link;


public class HtmlPage {
	
	public HtmlPage( URL url ) throws IOException {
		this( url, System.out );
	}
	public HtmlPage( URL url, PrintStream out ) throws IOException {
		if( null==url ) return;
		
		this.url = url;
		this.out = out;
		
		if( _DEBUG )
			out.println("[HtmlPage] url: "+url.toString());
		//Link link = new Link( null, url.toString() );
		//if( _DEBUG )
		//	System.out.println("[HtmlPage] Link: "+link);
		//this.url = link.getURL();

		//if( this.url==null ) return;

		//BufferedReader reader = new BufferedReader(new InputStreamReader( url().openStream() ));
		//String line;
    	//while( (line = reader.readLine ()) != null ) {
    	//	line = line.trim();
		//	System.out.println( line );
    	//} // while
    	
		try {
    	BufferedInputStream in = new BufferedInputStream( url().openStream() );
		Tidy tidy = new Tidy();
		tidy.setQuiet( true );					// do not print "Tidy (vers 4th August 2000) Parsing "InputStream""
		//tidy.setMakeClean( true );			// remove presentational clutter
		//tidy.setXmlTags( true );				// treat input as XML
		//tidy.setXmlOut( true );				// create output as XML
		tidy.setXHTML( true );					// output extensible HTML
		tidy.setCharEncoding( org.w3c.tidy.Configuration.UTF8 );
		tidy.setDropFontTags( false );			// discard presentation tags
		tidy.setDropEmptyParas( true );			// discard empty p elements
		tidy.setMakeClean( true );				// remove presentational clutter
		// I am not sure how these two methods work.
		//tidy.setNumEntities( false );			// do not use numeric entities
		//tidy.setQuoteAmpersand( true );		// output naked ampersand as &
		tidy.setEncloseBlockText( true );		// if true text in blocks is wrapped in <p>'s
		//tidy.setRawOut( true );				// avoid mapping values > 127 to entities
		//tidy.setQuoteNbsp( true );			// output non-breaking space as entity
		tidy.setShowWarnings( false );			// show warnings. however errors are always shown.

		Document doc = tidy.parseDOM(in, null);
		tidy.setTabsize(4);
		tidy.setSpaces(4);
		tidy.setIndentContent(true);
		//tidy.pprint(doc, System.out);
		links = new Vector<Link>(0);
		process( doc );
		in.close();
		} catch (FileNotFoundException ex) {
			out.println("[HtmlPage] DEAD LINK: "+url());
		} catch (UnknownHostException ex) {
			out.println("[HtmlPage] UNREACHABLE HOST: "+url());
		} catch (BindException ex) {
			out.println("[HtmlPage] BindException: "+ex.getMessage()+" by "+url());
		} catch (Exception ex) {
			out.println("[HtmlPage] "+ex.getMessage()+ ", caused by "+url());
			ex.printStackTrace( out );
		}
	}

	private void process( Node node ) throws MalformedURLException, UnsupportedEncodingException {
		int type = node.getNodeType();
		switch ( type ) {
		case Node.DOCUMENT_NODE:
			if(_DEBUG)
				System.out.println("[HtmlPage.process] DOCUMENT_NODE: "+node.getNodeName()+"...");
			process(((Document)node).getDocumentElement());
			break;

		case Node.DOCUMENT_TYPE_NODE:
			if(_DEBUG)
				System.out.println("[HtmlPage.process] DOCUMENT_TYPE_NODE: "+node.getNodeName()+"...");
			break;

		case Node.ELEMENT_NODE:
			if(_DEBUG)
				System.out.println("[HtmlPage.process] ELEMENT_NODE: "+node.getNodeName()+"...");
			
			if( node.getNodeName().equalsIgnoreCase("A") ) {
				StringBuffer sb = new StringBuffer();
				sb.append('<');
				sb.append(node.getNodeName().toUpperCase());

				NamedNodeMap attrs = node.getAttributes();
				for( int i = 0; i < attrs.getLength(); i++ ) {
					sb.append(' ');
					sb.append(attrs.item(i).getNodeName());
					sb.append("=\"");

					sb.append(attrs.item(i).getNodeValue());
					sb.append('"');
				} // for i
				sb.append('>');
				if(_DEBUG)
					out.println("[HtmlPage.process] \t"+sb+"...");
				String link = sb.toString(); 
				if( null!=link && !link.equals("") ) {
					//Link l = new Link(new AnchorElement(link), url());
					AnchorElement anchor = new AnchorElement(link);
					Link l = new Link(url(), anchor.getHref(), true, out );
					if( l!=null ) {
						links.addElement(l);
					} // if l
					else {
						out.println("[HtmlPage] NULL LINK by "+link);
					}
				} // if link
			} // if node.getNodeName()
			NodeList children = node.getChildNodes();
			if( children != null ) {
				int len = children.getLength();
				for( int i = 0; i < len; i++ ) {
					process(children.item(i));
				} // for i
			} // if children
			break;

		case Node.TEXT_NODE:
			//System.out.println("[HtmlPage.process] TEXT_NODE: "+node.getNodeName()+"...");
			break;

		case Node.COMMENT_NODE:
			if(_DEBUG)
				out.println("[HtmlPage.process] COMMENT_NODE: "+node.getNodeName()+"...");
			break;

		default:
			if(_DEBUG)
				out.println("[HtmlPage.process] What else: "+node.getNodeName()+","+node.getNodeValue()+"???");
			break;
		} // switch
	} // process()
	
	public Link linkAt( int index ) {
		return links.elementAt(index);
	}
	public Vector<Link> links() {
		return links;
	}
	public int linkCount() {
		if( links!=null ) return links.size();
		else return -1;
	}
	public URL url() {
		return url;
	}
	
	
	public static void main( String[] arg ) {
		try {
			//HtmlPage page = new HtmlPage( new URL("http://www.cs.usu.edu/~/lim/index.html") );
			//HtmlPage page = new HtmlPage( new URL("http://www.cs.usu.edu/~lim/") );
			//HtmlPage page = new HtmlPage( new URL("http://www.cs.usu.edu/~lim/dm06/index.html") );
			//HtmlPage page = new HtmlPage( new URL("http://www.cs.usu.edu/~lim/db06/index.html") );
			HtmlPage page = new HtmlPage( new URL("http://localhost/index.html.en") );
			//HtmlPage page = new HtmlPage( new URL("http://localhost") );
			System.out.println( "Copied from "+page.url() );
			System.out.println( "Number of links: "+page.linkCount() );
			for( int i=0; i<page.linkCount(); i++ ) {
				System.out.println("\t"+page.linkAt(i));
			}
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	/**
	 * The source URL of this page.
	 */
	private URL url;
	/**
	 * Links contained in this page.
	 */
	Vector<Link> links;
	/**
	 * 
	 */
	PrintStream out;
	
	boolean _DEBUG = false;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一区二区在线免费看| 日韩电影在线免费观看| 国产精品69毛片高清亚洲| 国产亚洲精品bt天堂精选| 成人一级黄色片| 亚洲精品自拍动漫在线| 久久综合九色综合97婷婷 | 亚洲青青青在线视频| 欧美精品tushy高清| 国产精品一区三区| 无码av免费一区二区三区试看| 精品国偷自产国产一区| 欧洲一区二区av| 不卡的电视剧免费网站有什么| 无吗不卡中文字幕| 亚洲另类一区二区| 日本一区二区三区久久久久久久久不| 色综合天天综合网国产成人综合天| 精久久久久久久久久久| 国产清纯白嫩初高生在线观看91| 色噜噜狠狠色综合中国 | 粉嫩13p一区二区三区| 人人爽香蕉精品| 五月婷婷色综合| 亚洲一区中文日韩| 亚洲欧美精品午睡沙发| 亚洲私人影院在线观看| 日本一区二区电影| 国产日韩欧美制服另类| 久久久久久久电影| 中文字幕一区二区三区不卡| 久久精品欧美一区二区三区不卡| 91精品在线观看入口| 日韩一区二区在线看片| 精品久久久久久无| 国产欧美日韩三区| 一区二区三区在线高清| 一区二区三区四区激情| 三级影片在线观看欧美日韩一区二区| 亚州成人在线电影| 精品一区二区三区日韩| 国产风韵犹存在线视精品| 91蜜桃在线免费视频| 欧美日韩国产片| 国产欧美一区二区精品性色超碰 | 国产精品香蕉一区二区三区| 国产91露脸合集magnet| 欧美日韩免费观看一区二区三区| 欧美一级在线视频| 久久久亚洲综合| 亚洲欧美日韩综合aⅴ视频| 看电视剧不卡顿的网站| 在线精品视频一区二区| www久久久久| 亚洲精品视频自拍| 国产成人免费在线| 91精品欧美福利在线观看| 精品国产乱码久久久久久浪潮| 26uuu精品一区二区在线观看| 国产精品国产三级国产aⅴ原创| 蜜桃av噜噜一区| 欧美片网站yy| 一区二区三区四区在线播放| 国产成人在线视频网址| 久久九九影视网| 精品一区二区精品| 精品日韩在线一区| 石原莉奈在线亚洲二区| 欧美日韩在线观看一区二区 | 337p粉嫩大胆噜噜噜噜噜91av| 亚洲色图欧洲色图婷婷| 成人免费观看男女羞羞视频| 久久久蜜臀国产一区二区| 精品一区二区三区在线观看| 精品国产乱码久久久久久久| 国产一区二区看久久| 国产亚洲精品7777| 色美美综合视频| 亚洲成在线观看| 欧美一区二区黄| 久久99九九99精品| 午夜日韩在线电影| 日韩一级视频免费观看在线| 久久国产精品99久久久久久老狼| 欧美精品一区二区三区在线播放 | 悠悠色在线精品| 日韩欧美你懂的| 色综合天天综合网国产成人综合天| 亚洲综合色自拍一区| 91精品国产色综合久久ai换脸| 久久99日本精品| 亚洲午夜视频在线观看| 欧美精品一区二区不卡| 欧美性色黄大片手机版| 国内精品嫩模私拍在线| 一区二区三区在线免费观看| 91精品国产日韩91久久久久久| 国产成人av一区二区三区在线观看| 亚洲精选免费视频| 亚洲视频一区在线| 免费看欧美女人艹b| 精品国产亚洲一区二区三区在线观看| 国产成人在线色| 免费一区二区视频| 看电影不卡的网站| 免费日韩伦理电影| 亚洲成人av一区| 亚洲综合小说图片| 亚洲激情在线播放| 亚洲午夜一区二区| 亚洲综合男人的天堂| 亚洲色图欧洲色图婷婷| 亚洲人成伊人成综合网小说| 欧美国产97人人爽人人喊| 欧美v日韩v国产v| 97超碰欧美中文字幕| 午夜视频在线观看一区| 久久久久久夜精品精品免费| 国产成人免费视频一区| 天天色天天操综合| 性做久久久久久久免费看| 日韩激情视频在线观看| 日韩精品国产精品| 精品亚洲成a人| 丁香激情综合五月| 91久久香蕉国产日韩欧美9色| 欧美日韩精品二区第二页| 日韩午夜av电影| 国产精品久久99| 日本vs亚洲vs韩国一区三区二区| 欧美aⅴ一区二区三区视频| 日本午夜精品视频在线观看| 久久精品国产99国产| www.日韩精品| 精品少妇一区二区三区视频免付费 | 性欧美大战久久久久久久久| 国产一区二区美女| 91福利小视频| 欧美经典三级视频一区二区三区| 亚洲欧美日韩精品久久久久| 国产成人在线看| 日韩欧美卡一卡二| 亚洲国产欧美在线| av午夜精品一区二区三区| 精品国产91亚洲一区二区三区婷婷 | 高清不卡在线观看| 欧美成人精品1314www| 视频一区中文字幕| 日本高清视频一区二区| 亚洲欧洲综合另类| av成人免费在线| 亚洲视频香蕉人妖| 97国产一区二区| 一区二区三区日韩欧美精品| 99精品国产91久久久久久| 国产精品国产三级国产三级人妇 | 免费在线观看成人| 日韩亚洲欧美在线| 紧缚奴在线一区二区三区| 精品国产91久久久久久久妲己 | 欧美极品aⅴ影院| 国产成人免费视频网站| 欧美高清在线视频| 欧美亚洲自拍偷拍| 亚洲午夜精品在线| 8v天堂国产在线一区二区| 日韩高清不卡在线| 国产精品色婷婷久久58| 色婷婷av一区二区三区之一色屋| 亚洲国产欧美在线| 国产天堂亚洲国产碰碰| 94-欧美-setu| 毛片基地黄久久久久久天堂| 久久久精品免费免费| 欧美亚洲自拍偷拍| 成人动漫一区二区在线| 亚洲va欧美va人人爽| 日本一二三不卡| 精品久久久久久最新网址| 欧美日韩国产高清一区二区| 国产在线观看一区二区| 亚洲成av人**亚洲成av**| 久久久精品国产免费观看同学| 在线免费视频一区二区| 韩国一区二区在线观看| 五月天精品一区二区三区| 日韩一区日韩二区| 国产精品成人一区二区三区夜夜夜| 欧美午夜在线观看| 91国在线观看| 精品视频一区 二区 三区| 99久久精品免费观看| 成人高清免费在线播放| 国产99久久久国产精品| 懂色av一区二区三区免费看| 美国毛片一区二区| 国产一二精品视频| 国产精品一二三四| 99久久99久久免费精品蜜臀| av中文一区二区三区|