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

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

?? documentworker.cs

?? 一個不錯的代碼,大家快下啊,只是好像有點點錯誤,稍微調試一下就行了
?? 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>
	// 完成必須由單個工作線程執(zhí)行的操作,包括
	// 等待可用的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.
		// 把它轉換成本地文件名稱。如果尚未創(chuàng)建相應的目錄
		// 結構,則創(chuàng)建之
		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;
			}

			// 必要時創(chuàng)建目錄結構			
			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一区二区三区免费野_久草精品视频
自拍偷拍欧美精品| 国产欧美综合在线| 成人av免费在线| 国产精品99久久久久久久vr| 麻豆极品一区二区三区| 蜜臀精品一区二区三区在线观看 | 中文字幕一区二区三区色视频| 久久亚洲一区二区三区四区| 久久午夜老司机| 久久精品视频一区二区| 中文字幕电影一区| 亚洲欧美日韩国产手机在线| 亚洲综合色成人| 偷拍自拍另类欧美| 六月丁香综合在线视频| 国产一区 二区 三区一级| 国产成人精品1024| av成人免费在线| 91福利小视频| 欧美一区二区网站| 国产欧美日韩不卡免费| 亚洲乱码国产乱码精品精98午夜| 一区二区三区视频在线观看| 日韩在线卡一卡二| 国产成人综合精品三级| 色婷婷av一区二区三区gif| 欧美剧情片在线观看| 精品国产91乱码一区二区三区| 国产精品丝袜一区| 午夜精品久久一牛影视| 国产精品一区二区久久不卡| 在线中文字幕一区二区| 精品免费视频一区二区| 中文字幕一区二| 青青青爽久久午夜综合久久午夜| 国产电影一区在线| 欧美日韩高清在线播放| 欧美韩日一区二区三区四区| 亚洲1区2区3区视频| 国产一区高清在线| 欧美日韩在线不卡| 国产精品久久久久久久第一福利 | 国产精品人人做人人爽人人添| 亚洲人成网站在线| 久久精品国产99| 91高清视频在线| 国产欧美日韩另类一区| 美女高潮久久久| 在线免费观看成人短视频| 日韩一级二级三级精品视频| 亚洲欧美日韩人成在线播放| 国产资源在线一区| 91精品国产aⅴ一区二区| 1区2区3区国产精品| 国产综合色视频| 欧美一卡2卡3卡4卡| 夜夜精品视频一区二区| 99视频有精品| 国产欧美日本一区视频| 国产乱对白刺激视频不卡| 欧美一区二区在线视频| 亚洲综合视频在线| 色综合久久中文字幕| 国产欧美一区二区三区在线看蜜臀| 日韩精品欧美成人高清一区二区| 91在线小视频| 亚洲日本一区二区三区| caoporen国产精品视频| 国产精品素人视频| 粉嫩av一区二区三区粉嫩| 久久综合久久综合九色| 韩国三级在线一区| 亚洲精品在线一区二区| 激情综合网激情| 久久婷婷成人综合色| 国产在线精品一区二区三区不卡 | 久久久久久久综合日本| 久久99精品久久只有精品| 国产精品入口麻豆原神| 国产欧美一区二区三区鸳鸯浴| 久久天天做天天爱综合色| 欧美日韩国产另类一区| 综合色天天鬼久久鬼色| 久久噜噜亚洲综合| 国产精品系列在线播放| 亚洲成av人在线观看| 欧美经典一区二区三区| 91精品国产色综合久久ai换脸| 成人性生交大片免费看中文 | 国产精品一区免费在线观看| 国产精品久久久久久久久免费桃花 | 亚洲成人免费观看| 欧美高清在线一区| 日韩欧美一区二区视频| 在线观看不卡视频| av一区二区不卡| 国产成人在线免费| 久久国产成人午夜av影院| 亚洲一区二区三区四区在线观看| 国产精品亲子伦对白| 久久久久久影视| 欧美电影免费观看高清完整版| 欧美人与禽zozo性伦| 色婷婷综合久久久久中文 | 91亚洲国产成人精品一区二三| 狠狠色狠狠色综合系列| 免费久久99精品国产| 亚洲444eee在线观看| 亚洲国产美国国产综合一区二区| 中文字幕亚洲一区二区av在线 | 69堂国产成人免费视频| 欧美在线一区二区三区| 91最新地址在线播放| aaa亚洲精品一二三区| 成人国产免费视频| 不卡一卡二卡三乱码免费网站| 国产成人av一区二区| 粗大黑人巨茎大战欧美成人| 国产99久久久国产精品潘金| 粉嫩欧美一区二区三区高清影视| 国产麻豆成人传媒免费观看| 韩国三级在线一区| 国产成人综合精品三级| 成人免费毛片嘿嘿连载视频| 波多野结衣中文一区| 91丨porny丨国产| 色噜噜狠狠成人中文综合| 91成人国产精品| 91精品国产色综合久久ai换脸| 国产精品久久久久久久久动漫 | 《视频一区视频二区| 中文字幕欧美一| 亚洲一区精品在线| 五月天欧美精品| 久久99热这里只有精品| 国产成人久久精品77777最新版本| 国产不卡视频在线播放| 一本色道亚洲精品aⅴ| 欧美人与性动xxxx| 久久久亚洲欧洲日产国码αv| 国产精品高清亚洲| 午夜在线电影亚洲一区| 国内偷窥港台综合视频在线播放| 国产成人丝袜美腿| 在线精品观看国产| 日韩欧美一区二区不卡| 国产精品污污网站在线观看| 一区二区三区四区不卡视频| 精品在线你懂的| 97精品国产97久久久久久久久久久久| 在线视频欧美精品| 精品福利一区二区三区| 亚洲精品一二三区| 久久99精品国产麻豆不卡| 99re在线视频这里只有精品| 欧美精品自拍偷拍| 国产精品不卡一区二区三区| 午夜亚洲福利老司机| 国产99久久久国产精品| 91麻豆精品国产91久久久久久| 国产日韩欧美高清| 日本视频一区二区| 91免费看片在线观看| 欧美精品一区二区精品网| 一区二区在线电影| 国产乱理伦片在线观看夜一区| 在线看不卡av| 国产精品成人一区二区艾草 | 国产v日产∨综合v精品视频| 欧美综合在线视频| 国产精品免费丝袜| 精品在线播放免费| 制服.丝袜.亚洲.中文.综合| 亚洲三级在线免费观看| 国产精品亚洲成人| 精品欧美久久久| 日韩中文字幕不卡| 在线免费观看日本欧美| 中文字幕在线不卡| 国产盗摄精品一区二区三区在线| 91精品国产麻豆| 午夜视频一区二区三区| 在线视频你懂得一区| 亚洲素人一区二区| www.日韩av| 国产精品久久久久桃色tv| 国产综合色精品一区二区三区| 欧美一级搡bbbb搡bbbb| 五月婷婷久久综合| 欧美色涩在线第一页| 一区二区三区在线播放| 91亚洲男人天堂| 亚洲手机成人高清视频| jlzzjlzz国产精品久久| 国产精品国产馆在线真实露脸| 成人av免费观看| 日本一区二区久久| 99精品视频在线观看免费| 日韩一区日韩二区| 日本久久精品电影|