在工作中经常要采集数据。我的做法是下载网页html代码然后正则匹配。下载网页源代码主要采用两种方法:

第一 :WebClient

   ///<summary>
/// 获取网页源代码
///</summary>
///<param name="p_CharSet">网页编码</param>
///<param name="p_Url">网址</param>
///<returns>源代码</returns>
public static string WebData(string p_CharSet, string[] p_Url)
{
string WebData = "";

for (int i = 0; i < p_Url.Length; i++)
{
try
{
//创建实例
WebClient web = new WebClient();
byte[] Data = web.DownloadData(p_Url[i]);
//下载数据并返回数组字节
WebData = Encoding.GetEncoding(p_CharSet).GetString(Data) + WebData;
}
catch (Exception)
{

return "";
}
}
return WebData;
}


方法二:HttpWebRequest

 public static string GetData(string p_Url)
{
try
{
string OutData = "";
//创建HttpWebRequest实例
HttpWebRequest ObjHttpWebRequest = (HttpWebRequest)WebRequest.Create(p_Url);
//设置请求方法
ObjHttpWebRequest.Method = "GET";
//设置或获取UserAgent http的值
ObjHttpWebRequest.UserAgent =
"Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13";

//创建HttpWebResponse实例
HttpWebResponse ObjHttpWebResponse = (HttpWebResponse)ObjHttpWebRequest.GetResponse();
//创建流对象
Stream ObjResponseStream = ObjHttpWebResponse.GetResponseStream();
//读取流实例
StreamReader ObjStreamReader = new StreamReader(ObjResponseStream, Encoding.GetEncoding("gb2312"));
//读取流
OutData = ObjStreamReader.ReadToEnd();
//关闭
ObjStreamReader.Close();
ObjResponseStream.Close();
return OutData;
}
catch (Exception ex)
{
ErrorLog.AddMessage(ex.Message);
return "";
}
}

方法一和方法二的主要区别在于:

1.方法一 简单 易用,但是灵活性不高。不能下载需要身份验证的网页

2.方法二 复杂,灵活性高。需要身份验证的网页用此方法。