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

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

?? documentworker.cs

?? (c#)Internet蜘蛛程序.rar
?? CS
字號:
using System;
using System.Net;
using System.IO;
using System.Threading;

namespace Spider
{
	/// <summary>
	/// Perform all of the work of a single thread for the spider.
	/// This involves waiting for a URL to becomve available, download
	/// and then processing the page.
	/// 
	/// </summary>
	// 完成必須由單個工作線程執行的操作,包括
	// 等待可用的URL,下載和處理頁面
	public class DocumentWorker
	{
		/// <summary>
		/// The base URI that is to be spidered.
		/// </summary>
		// 要掃描的基礎URI
		private Uri m_uri;

		/// <summary>
		/// The spider that this thread "works for"
		/// </summary>
		// 
		private Spider m_spider;

		/// <summary>
		/// The thread that is being used.
		/// </summary>
		private Thread m_thread;

		/// <summary>
		/// The thread number, used to identify this worker.
		/// </summary>
		// 線程編號,用來標識當前的工作線程
		private int m_number;
		

		/// <summary>
		/// The name for default documents.
		/// </summary>
		// 缺省文檔的名字
		public const string IndexFile = "index.html";

		/// <summary>
		/// Constructor.
		/// </summary>
		/// <param name="spider">The spider that owns this worker.</param>
		// 構造函數,參數表示擁有當前工作線程的蜘蛛程序
		public DocumentWorker(Spider spider)
		{
			m_spider = spider;
		}

		/// <summary>
		/// This method will take a URI name, such ash /images/blank.gif
		/// and convert it into the name of a file for local storage.
		/// If the directory structure to hold this file does not exist, it
		/// will be created by this method.
		/// </summary>
		/// <param name="uri">The URI of the file about to be stored</param>
		/// <returns></returns>
		// 輸入參數是一個URI名稱,例如/images/blank.gif.
		// 把它轉換成本地文件名稱。如果尚未創建相應的目錄
		// 結構,則創建之
		private string convertFilename(Uri uri)
		{
			string result = m_spider.OutputPath;
			int index1;
			int index2;			

			// add ending slash if needed
			if( result[result.Length-1]!='\\' )
				result = result+"\\";

			// strip the query if needed

			String path = uri.PathAndQuery;
			int queryIndex = path.IndexOf("?");
			if( queryIndex!=-1 )
				path = path.Substring(0,queryIndex);

			// see if an ending / is missing from a directory only
			
			int lastSlash = path.LastIndexOf('/');
			int lastDot = path.LastIndexOf('.');

			if( path[path.Length-1]!='/' )
			{
				if(lastSlash>lastDot)
					path+="/"+IndexFile;
			}

			// determine actual filename		
			lastSlash = path.LastIndexOf('/');

			string filename = "";
			if(lastSlash!=-1)
			{
				filename=path.Substring(1+lastSlash);
				path = path.Substring(0,1+lastSlash);
				if(filename.Equals("") )
					filename=IndexFile;
			}

			// 必要時創建目錄結構			
			index1 = 1;
			do
			{
				index2 = path.IndexOf('/',index1);
				if(index2!=-1)
				{
					String dirpart = path.Substring(index1,index2-index1);
					result+=dirpart;
					result+="\\";
				
				
					Directory.CreateDirectory(result);

					index1 = index2+1;					
				}
			} while(index2!=-1);			

			// attach name
			result+=filename;

			return result;
		}

		/// <summary>
		/// Save a binary file to disk.
		/// </summary>
		/// <param name="response">The response used to save the file</param>
		// 將二進制文件保存到磁盤
		private void SaveBinaryFile(WebResponse response)
		{
			byte []buffer = new byte[1024];

			if( m_spider.OutputPath==null )
				return;

			string filename = convertFilename( response.ResponseUri );
			Stream outStream = File.Create( filename );
			Stream inStream = response.GetResponseStream();	
			
			int l;
			do
			{
				l = inStream.Read(buffer,0,buffer.Length);
				if(l>0)
					outStream.Write(buffer,0,l);
			}
			while(l>0);
			
			outStream.Close();
			inStream.Close();

		}

		/// <summary>
		/// Save a text file.
		/// </summary>
		/// <param name="buffer">The text to save</param>
		// 保存文本文件
		private void SaveTextFile(string buffer)
		{
			if( m_spider.OutputPath==null )
				return;

			string filename = convertFilename( m_uri );
			StreamWriter outStream = new StreamWriter( filename );
			outStream.Write(buffer);
			outStream.Close();
		}

		/// <summary>
		/// Download a page
		/// </summary>
		/// <returns>The data downloaded from the page</returns>
		// 下載一個頁面
		private string GetPage()
		{
			WebResponse response = null;
			Stream stream = null;
			StreamReader reader = null;

			try
			{
				HttpWebRequest request = (HttpWebRequest)WebRequest.Create(m_uri);
							
				response = request.GetResponse();
				stream = response.GetResponseStream();	

				if( !response.ContentType.ToLower().StartsWith("text/") )
				{
					SaveBinaryFile(response);
					return null;
				}

				string buffer = "",line;

				reader = new StreamReader(stream);
			
				while( (line = reader.ReadLine())!=null )
				{
					buffer+=line+"\r\n";
				}
			
				SaveTextFile(buffer);
				return buffer;
			}
			catch(WebException e)
			{
				System.Console.WriteLine("下載失敗,錯誤:" + e);
				return null;
			}
			catch(IOException e)
			{
				System.Console.WriteLine("下載失敗,錯誤:" + e);
				return null;
			}
			finally
			{
				if( reader!=null ) reader.Close();
				if( stream!=null ) stream.Close();
				if( response!=null ) response.Close();
			}
		}

		/// <summary>
		/// Process each link encountered. The link will be recorded
		/// for later spidering if it is an http or https docuent, 
		/// has not been visited before(determined by spider class),
		/// and is in the same host as the original base URL.
		/// </summary>
		/// <param name="link">The URL to process</param>
		private void ProcessLink(string link)
		{
			Uri url;

			// fully expand this URL if it was a relative link
			try
			{
				url = new Uri(m_uri,link,false);
			}
			catch(UriFormatException e)
			{
				System.Console.WriteLine( "Invalid URI:" + link +" Error:" + e.Message);
				return;
			}

			if(!url.Scheme.ToLower().Equals("http") &&
				!url.Scheme.ToLower().Equals("https") )
				return;

			// comment out this line if you would like to spider
			// the whole Internet (yeah right, but it will try)
			if( !url.Host.ToLower().Equals( m_uri.Host.ToLower() ) )
				return;

			//System.Console.WriteLine( "Queue:"+url );
			m_spider.addURI( url );



		}

		/// <summary>
		/// Process a URL
		/// </summary>
		/// <param name="page">the URL to process</param>
		private void ProcessPage(string page)
		{
			ParseHTML parse = new ParseHTML();
			parse.Source = page;

			while(!parse.Eof())
			{
				char ch = parse.Parse();
				if(ch==0)
				{
					Attribute a = parse.GetTag()["HREF"];
					if( a!=null )
						ProcessLink(a.Value);
					
					a = parse.GetTag()["SRC"];
					if( a!=null )
						ProcessLink(a.Value);
				}
			}
		}


		/// <summary>
		/// This method is the main loop for the spider threads.
		/// This method will wait for URL's to become available, 
		/// and then process them. 
		/// </summary>
		public void Process()
		{
			while(!m_spider.Quit )
			{
				m_uri = m_spider.ObtainWork();
				
				m_spider.SpiderDone.WorkerBegin();
				System.Console.WriteLine("Download("+this.Number+"):"+m_uri);			
				string page = GetPage();
				if(page!=null)
					ProcessPage(page);
				m_spider.SpiderDone.WorkerEnd();
			}
		}

		/// <summary>
		/// Start the thread.
		/// </summary>
		public void start()
		{
			ThreadStart ts = new ThreadStart( this.Process );
			m_thread = new Thread(ts);
			m_thread.Start();
		}

		/// <summary>
		/// The thread number. Used only to identify this thread.
		/// </summary>
		public int Number 
		{
			get
			{
				return m_number;
			}

			set
			{
				m_number = value;
			}
		
		}
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美在线观看视频在线| |精品福利一区二区三区| 国产美女在线精品| 有码一区二区三区| 97aⅴ精品视频一二三区| 国产精品第一页第二页第三页| 不卡一区二区三区四区| 成人欧美一区二区三区小说| 在线观看91视频| 日韩中文字幕1| 51精品国自产在线| 欧美日韩成人一区二区| 色综合视频在线观看| 成人动漫一区二区| 在线观看成人免费视频| 亚洲免费av网站| 8x福利精品第一导航| 99久久伊人精品| 精品夜夜嗨av一区二区三区| 色噜噜夜夜夜综合网| 午夜精彩视频在线观看不卡| 亚洲天堂a在线| 91黄色免费版| 欧美一卡二卡在线| 在线不卡中文字幕| 亚洲裸体在线观看| 日日夜夜精品视频免费| 亚洲综合色在线| 美女视频黄久久| 日本不卡一区二区| 午夜精品福利一区二区三区av| 国产最新精品免费| 亚洲国产成人私人影院tom| 久久亚区不卡日本| 色域天天综合网| 26uuu国产日韩综合| 成人午夜av电影| 亚洲成av人影院| 国产三级欧美三级| 欧美日韩国产大片| 成人性色生活片免费看爆迷你毛片| 一区二区三区欧美日韩| 欧美mv日韩mv| 欧美日韩国产成人在线免费| 成人黄色软件下载| 精品一区二区三区香蕉蜜桃| 亚洲自拍偷拍九九九| 久久久亚洲综合| 91精品欧美久久久久久动漫| 99国内精品久久| 国产在线一区观看| 奇米在线7777在线精品| 亚洲一区在线观看免费观看电影高清| 久久久久久9999| 精品少妇一区二区三区视频免付费| 91黄色激情网站| 91在线精品一区二区| 亚洲欧美国产77777| 精品区一区二区| 精品国产一区二区精华| 欧美日韩在线观看一区二区 | 欧美中文一区二区三区| 久久草av在线| 五月天久久比比资源色| 2020日本不卡一区二区视频| 欧美日韩一区三区| 国产精品中文字幕一区二区三区| 亚洲成人免费观看| 中文字幕国产一区二区| 欧美一级搡bbbb搡bbbb| 欧美日韩一区二区三区四区| 成人午夜av影视| 国内精品伊人久久久久av一坑| 亚洲午夜一区二区三区| 久久久噜噜噜久噜久久综合| 日韩一区二区三| 欧美体内she精高潮| 7777女厕盗摄久久久| 18涩涩午夜精品.www| www国产成人| 国产成人精品三级| 一区二区三区免费在线观看| 丁香婷婷深情五月亚洲| 国产精品九色蝌蚪自拍| 97精品久久久午夜一区二区三区 | 免费亚洲电影在线| 国产精品免费观看视频| 精品国产亚洲一区二区三区在线观看| 欧美综合一区二区| 日本精品免费观看高清观看| 春色校园综合激情亚洲| 国产精品99久久久| 国产一区二区三区免费播放| 乱一区二区av| 日本中文在线一区| 日本欧美肥老太交大片| 一区二区三区精密机械公司| 中文字幕乱码亚洲精品一区 | 天天做天天摸天天爽国产一区| 一区二区三区在线观看国产| 中文字幕视频一区| 国产精品久久久久aaaa樱花| 国产精品无码永久免费888| 国产女人18水真多18精品一级做| 国产日本欧洲亚洲| 美国毛片一区二区| 成人丝袜高跟foot| 夜夜嗨av一区二区三区四季av| 日韩美女在线视频| 精一区二区三区| www.色精品| 精品国产免费久久| 亚洲三级免费观看| 国产一区二区三区国产| 成人国产精品免费观看视频| 99视频精品在线| 欧美一级国产精品| 亚洲精品成人在线| 国产一区在线看| 欧美色图激情小说| 精品成人一区二区三区| 午夜一区二区三区在线观看| 成人免费毛片a| 26uuu欧美| 无吗不卡中文字幕| 91福利视频网站| 国产女主播视频一区二区| 免费不卡在线视频| 欧美丝袜第三区| 中文字幕一区二区三区乱码在线 | 国产99精品国产| 欧美一区二区三区免费观看视频| 伊人夜夜躁av伊人久久| 成人av动漫在线| 久久综合九色欧美综合狠狠| 日本一道高清亚洲日美韩| 在线免费观看不卡av| 国产精品初高中害羞小美女文| 日韩电影在线免费看| 欧美三级三级三级| 亚洲午夜电影在线| 欧亚一区二区三区| 亚洲精品免费在线| 91麻豆swag| 亚洲欧美乱综合| 99久久精品费精品国产一区二区| 国产人妖乱国产精品人妖| 日韩av网站免费在线| 国产午夜三级一区二区三| 久久黄色级2电影| 欧美一级一区二区| 免播放器亚洲一区| 精品精品国产高清a毛片牛牛| 亚洲国产精品综合小说图片区| 欧美日韩国产免费| 日本中文字幕一区二区视频 | 日本三级亚洲精品| 欧美一区二区三区思思人| 天天亚洲美女在线视频| 制服丝袜一区二区三区| 蜜乳av一区二区| 欧美tickling挠脚心丨vk| 美腿丝袜在线亚洲一区| 日韩你懂的在线观看| 狠狠色综合播放一区二区| 久久久久久久久99精品| 成人黄色一级视频| 中文字幕日韩欧美一区二区三区| 99国产精品国产精品久久| 亚洲欧美日韩国产中文在线| 一本久久a久久免费精品不卡| 亚洲一区av在线| 91精品在线一区二区| 精品一区二区日韩| 国产日本欧美一区二区| 国产a久久麻豆| 亚洲一区二区三区四区的| 欧美一区二区成人6969| 国产精一区二区三区| 中文字幕亚洲区| 欧美日韩免费一区二区三区视频| 日本最新不卡在线| 欧美一区二区三区视频在线| 国产黄人亚洲片| 亚洲人一二三区| 91精品国产综合久久精品麻豆| 麻豆精品在线播放| 国产精品久久久久久久久果冻传媒| 色偷偷一区二区三区| 极品少妇一区二区| 一本到不卡免费一区二区| 欧美三级欧美一级| 一本色道**综合亚洲精品蜜桃冫| 久久www免费人成看片高清| 麻豆一区二区三| 91亚洲精品一区二区乱码| 欧美三级乱人伦电影| 久久不见久久见免费视频1| 国产69精品久久777的优势| 处破女av一区二区|