从Internet上抓取指定URL的源码的方案
| 作者: |
引言:
在做無線項(xiàng)目的時(shí)候,與通訊公司的數(shù)據(jù)通訊有一部分是通過XML交互的,所以必須要?jiǎng)討B(tài)抓取通訊公司提供的固定的Internet上的數(shù)據(jù),便研究了一下如何抓取固定url上的數(shù)據(jù),現(xiàn)與大家分享一下。
類名GetPageCode,有一個(gè)方法GetSource,通過屬性傳遞參數(shù),入?yún)⒖刂频氖且〉肬RL的地址,代理服務(wù)器的設(shè)置及輸出方式的控制,這里大家可以再擴(kuò)展自己的需要,我這里只提供了兩種方式,一種是直接寫到本地的某個(gè)文件中,另外一種就是返回字符串的。類里已經(jīng)作了比較詳細(xì)的注釋,我想大家很容易就看明白了,如果實(shí)在不明白,那就msn上問吧,MSN:yubo@x263.net。
調(diào)用方式:
#region 測試獲取遠(yuǎn)程網(wǎng)頁
GetPageCode gpc = new GetPageCode();
gpc.Url="http://ppcode.com";
gpc.ProxyState=1;//使用代理服務(wù)器,0為不使用,設(shè)置為1后下面的代理設(shè)置才起作用
gpc.ProxyAddress="http://proxyName.com";//代理服務(wù)器地址
gpc.ProxyPort="80";//代理服務(wù)器的端口
gpc.ProxyAccount="proxy";//代理服務(wù)器賬號
gpc.ProxyPassword="password";//代理服務(wù)器密碼
gpc.ProxyDomain="bqc";//代理服務(wù)器域
gpc.OutFilePath=filePath;//設(shè)置輸出文件路徑的地方,如果不設(shè)置,則返回字符串
gpc.GetSource();//處理
string tempErr=gpc.NoteMessage;//如果出錯(cuò),這里會(huì)提示
string tempCode=gpc.OutString;//返回的字符串
#endregion
類代碼:
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Net;
using System.Text;
using System.Web;
???
namespace Test.Com
{
/// <summary>
/// 功能:取得Internet上的URL頁的源碼
/// 創(chuàng)建:2004-03-22
/// 作者:Rexsp MSN:yubo@x263.net
/// </summary>
public class GetPageCode
{
??#region 私有變量
??/// <summary>
??/// 網(wǎng)頁URL地址
??/// </summary>
??private string url=null;
??/// <summary>
??/// 是否使用代碼服務(wù)器:0 不使用??1 使用代理服務(wù)器
??/// </summary>
??private int proxyState=0;
??/// <summary>
??/// 代理服務(wù)器地址
??/// </summary>
??private string proxyAddress=null;
??/// <summary>
??/// 代理服務(wù)器端口
??/// </summary>
??private string proxyPort=null;
??/// <summary>
??/// 代理服務(wù)器用戶名
??/// </summary>
??private string proxyAccount=null;
??/// <summary>
??/// 代理服務(wù)器密碼
??/// </summary>
??private string proxyPassword=null;
??/// <summary>
??/// 代理服務(wù)器域
??/// </summary>
??private string proxyDomain=null;
??/// <summary>
??/// 輸出文件路徑
??/// </summary>
??private string outFilePath=null;
??/// <summary>
??/// 輸出的字符串
??/// </summary>
??private string outString=null;
??/// <summary>
??/// 提示信息
??/// </summary>
??private string noteMessage;
??#endregion
??#region 公共屬性
??/// <summary>
??/// 欲讀取的URL地址
??/// </summary>
??public string Url
??{
???get{return url;}
???set{url=value;}
??}
??/// <summary>
??/// 是否使用代理服務(wù)器標(biāo)志
??/// </summary>
??public int ProxyState
??{
???get{return proxyState;}
???set{proxyState=value;}
??}
??/// <summary>
??/// 代理服務(wù)器地址
??/// </summary>
??public string ProxyAddress
??{
???get{return proxyAddress;}
???set{proxyAddress=value;}
??}
??/// <summary>
??/// 代理服務(wù)器端口
??/// </summary>
??public string ProxyPort
??{
???get{return proxyPort;}
???set{proxyPort=value;}
??}
??/// <summary>
??/// 代理服務(wù)器賬號
??/// </summary>
??public string ProxyAccount
??{
???get{return proxyAccount;}
???set{proxyAccount=value;}
??}
??/// <summary>
??/// 代理服務(wù)器密碼
??/// </summary>
??public string ProxyPassword
??{
???get{return proxyPassword;}
???set{proxyPassword=value;}
??}
??/// <summary>
??/// 代理服務(wù)器域
??/// </summary>
??public string ProxyDomain
??{
???get{return proxyDomain;}
???set{proxyDomain=value;}
??}
??/// <summary>
??/// 輸出文件路徑
??/// </summary>
??public string OutFilePath
??{
???get{return outFilePath;}
???set{outFilePath=value;}
??}
??/// <summary>
??/// 返回的字符串
??/// </summary>
??public string OutString
??{
???get{return outString;}
???
??}
??/// <summary>
??/// 返回提示信息
??/// </summary>
??public string NoteMessage
??{
???get{return noteMessage;}
???
??}
??
??#endregion
??
??#region 構(gòu)造函數(shù)
??public GetPageCode()
??{
??}
??#endregion
??#region 公共方法
??/// <summary>
??/// 讀取指定URL地址,存到指定文件中
??/// </summary>
??public void GetSource()
??{
???WebRequest request = WebRequest.Create(this.url);
???//使用代理服務(wù)器的處理
???if(this.proxyState==1)
???{
????//默認(rèn)讀取80端口的數(shù)據(jù)
????if(this.proxyPort==null)
?????this.ProxyPort="80";
????WebProxy myProxy=new WebProxy();
????myProxy = (WebProxy)request.Proxy;
????myProxy.Address = new Uri(this.ProxyAddress+":"+this.ProxyPort);
????myProxy.Credentials = new NetworkCredential(this.proxyAccount, this.proxyPassword, this.ProxyDomain);
????request.Proxy = myProxy;
???}
???try
???
???{
????//請求服務(wù)
????WebResponse response = request.GetResponse();
????//返回信息
????Stream resStream = response.GetResponseStream();
????StreamReader sr = new StreamReader(resStream, System.Text.Encoding.Default);
????string tempCode= sr.ReadToEnd();
????resStream.Close();
????sr.Close();
????//如果輸出文件路徑為空,便將得到的內(nèi)容賦給OutString屬性
????if(this.outFilePath==null)
????{
?????this.outString=tempCode;
????}
????else
????{
?????FileInfo fi = new FileInfo(this.outFilePath);
?????//如果存在文件則先干掉
?????if(fi.Exists)
??????fi.Delete();
???
?????StreamWriter sw = new StreamWriter(this.outFilePath,true,Encoding.Default);
?????sw.Write(tempCode);
?????sw.Flush();
?????sw.Close();
????}
???}
???catch
???{
????this.noteMessage="出錯(cuò)了,請檢查網(wǎng)絡(luò)是否連通;";
???}
??}
??#endregion
}
}
轉(zhuǎn)載于:https://www.cnblogs.com/huqingyu/archive/2004/07/26/27355.html
總結(jié)
以上是生活随笔為你收集整理的从Internet上抓取指定URL的源码的方案的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ODBC的多线程应用
- 下一篇: 申请成功,庆祝一下。