亚洲欧美第一页_禁久久精品乱码_粉嫩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.
	/// 
	/// This spider is copyright 2003 by Jeff Heaton. However, it is
	/// released under a Limited GNU Public License (LGPL). You may 
	/// use it freely in your own programs. For the latest version visit
	/// http://www.jeffheaton.com.	
	/// 
	/// </summary>
	public class DocumentWorker
	{
		/// <summary>
		/// The base URI that is to be spidered.
		/// </summary>
		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>
		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;
			}


			// create the directory structure, if needed
						
			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("Can't download:" + e);
				return null;
			}
			catch(IOException e)
			{
				System.Console.WriteLine("Can't download:" + 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 );
				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在线这里只有精品| 亚洲欧美日韩国产另类专区| 国产三级三级三级精品8ⅰ区| 欧美日韩午夜在线| 欧美日韩mp4| 欧美一区二区三区电影| 精品欧美一区二区久久| 欧美精品一区二区三区久久久| 欧美成人a在线| 日本一区二区三区视频视频| 国产女人18毛片水真多成人如厕 | 中文字幕一区二区三区四区不卡| 久久精品亚洲麻豆av一区二区| 国产亚洲一区二区三区四区| 国产精品电影一区二区| 成人欧美一区二区三区白人| 一区二区三区四区高清精品免费观看 | 在线电影欧美成精品| 在线精品视频一区二区| 欧美欧美午夜aⅴ在线观看| 欧美精品777| 久久久www成人免费无遮挡大片| 亚洲国产经典视频| 夜夜精品浪潮av一区二区三区| 亚洲五码中文字幕| 激情六月婷婷久久| 色综合激情五月| 精品黑人一区二区三区久久| 中文字幕不卡在线| 亚洲一区在线观看网站| 国产在线视频一区二区| 在线视频你懂得一区| 欧美一级搡bbbb搡bbbb| 中文字幕一区二区三区在线观看| 亚洲愉拍自拍另类高清精品| 精品亚洲免费视频| 欧美三级韩国三级日本一级| 日韩免费在线观看| 亚洲欧美另类小说视频| 国模一区二区三区白浆| 欧美性一二三区| 亚洲国产精品传媒在线观看| 秋霞电影网一区二区| 91丨porny丨首页| 日韩一区二区在线观看| 一区二区高清免费观看影视大全| 精品在线你懂的| 欧美三级欧美一级| 久久久久久久久伊人| 一个色在线综合| 国产91精品一区二区麻豆网站| 欧美日韩精品免费观看视频 | 亚洲精品中文字幕在线观看| 黄色日韩三级电影| 欧美日本国产视频| 亚洲日本成人在线观看| 国产suv精品一区二区6| 欧美一卡2卡3卡4卡| 亚洲一区视频在线观看视频| 91蜜桃网址入口| 中文字幕中文字幕中文字幕亚洲无线| 九九**精品视频免费播放| 欧美日韩一级大片网址| 亚洲午夜久久久久久久久久久| 成人美女视频在线观看| 国产女同性恋一区二区| 国产成人av电影免费在线观看| 日韩精品在线一区| 久久99精品久久久久久国产越南| 欧美精品色综合| 图片区小说区区亚洲影院| 欧美亚洲高清一区二区三区不卡| 亚洲色图欧美激情| 色综合久久中文字幕| 一区二区三区精密机械公司| 一本到不卡精品视频在线观看| 中文字幕一区二区三区在线播放| 99久精品国产| 一区二区成人在线观看| 欧美亚洲禁片免费| 五月天视频一区| 欧美一区二区三区在线| 国内精品在线播放| 国产日韩欧美麻豆| 91小视频免费看| 亚洲精品日韩一| 欧美日本在线播放| 免费观看91视频大全| 精品91自产拍在线观看一区| 国产精选一区二区三区| 国产欧美日韩亚州综合| 欧美主播一区二区三区美女| 天天综合天天综合色| 精品国产精品网麻豆系列| 国产成人免费av在线| 亚洲一区在线视频观看| 欧美一级一区二区| 国产乱码精品一区二区三区五月婷 | 久久亚洲精精品中文字幕早川悠里| 九九视频精品免费| 国产精品乱码一区二三区小蝌蚪| 色94色欧美sute亚洲线路一ni| 亚洲成av人**亚洲成av**| 久久综合av免费| av电影天堂一区二区在线观看| 亚洲高清免费在线| 久久久久成人黄色影片| 在线观看欧美精品| 激情综合色综合久久| 亚洲女与黑人做爰| 日韩一区二区精品在线观看| 波多野结衣的一区二区三区| 视频一区二区三区入口| 国产精品国产三级国产三级人妇| 欧美色大人视频| 国产精品一二三区| 亚洲成人高清在线| 成人免费在线观看入口| 欧美精品一区二区久久久| 在线观看av不卡| 国产成人福利片| 日韩国产欧美在线播放| 亚洲欧美综合色| 精品国产乱子伦一区| 欧美性做爰猛烈叫床潮| 93久久精品日日躁夜夜躁欧美| 蜜臀av性久久久久蜜臀aⅴ四虎| 亚洲欧洲精品一区二区三区| 精品奇米国产一区二区三区| 欧美日韩国产a| 色综合久久久久网| 成人福利电影精品一区二区在线观看 | 亚洲欧美一区二区三区久本道91| 亚洲精品一区在线观看| 91精品久久久久久蜜臀| 在线亚洲高清视频| 一本一道久久a久久精品综合蜜臀| 国产成人啪免费观看软件| 男女视频一区二区| 日韩福利视频网| 爽好多水快深点欧美视频| 亚洲激情五月婷婷| 亚洲人吸女人奶水| 国产精品全国免费观看高清| 国产欧美日韩另类一区| 欧美激情一区二区三区蜜桃视频| 日韩女优毛片在线| 日韩美女在线视频| 精品久久久久久久久久久久久久久 | 日本韩国欧美一区二区三区| jizzjizzjizz欧美| 成人av一区二区三区| 不卡av在线网| 国产成人免费视频一区| 国产999精品久久| 国产精品99久久久久久有的能看| 国产在线不卡一卡二卡三卡四卡| 久久精品国产网站| 国产精品亚洲午夜一区二区三区| 韩国精品久久久| 国产福利一区在线观看| 99精品视频在线播放观看| 日本精品一级二级| 欧美日韩精品三区| 久久天堂av综合合色蜜桃网| 国产精品青草综合久久久久99| 亚洲欧美自拍偷拍| 亚洲一区二区三区中文字幕在线| 天堂av在线一区| 国产在线精品一区二区| av色综合久久天堂av综合| 99精品视频在线观看| 欧美日本在线看| 久久久国产午夜精品| 亚洲色图.com| 日本女优在线视频一区二区| 国产露脸91国语对白| 91影院在线免费观看| 7777精品伊人久久久大香线蕉经典版下载 | 欧美丝袜自拍制服另类| 日韩美女视频在线| 国产精品全国免费观看高清| 亚洲风情在线资源站| 国产精品资源网| 在线观看日韩av先锋影音电影院| 日韩精品在线一区二区| 亚洲欧美日韩国产一区二区三区| 日本系列欧美系列| 成人18视频在线播放| 欧美一级在线观看| 国产精品福利一区二区三区| 蜜臀91精品一区二区三区| jizz一区二区| 久久蜜臀中文字幕| 丝袜诱惑制服诱惑色一区在线观看 | 老司机免费视频一区二区三区| 风间由美一区二区三区在线观看 | 中文字幕国产精品一区二区| 亚洲第一精品在线|