一、ASP.NET 使用HttpWebRequest抓取網頁內容
這種方式抓取某些頁面會失敗
不過,有時候我們會發現,這個程序在抓取某些頁面時,是獲不到所需的內容的,有時候甚至返回404的錯誤提示頁,這是什么原因呢?
其實,很多人都忽略了一個問題,那就是服務器默認的瀏覽器問題。有的服務器默認的瀏覽器是手機瀏覽器,那么,當我抓取這個服務器下的網頁是,就相當于用手機瀏覽器來打開網頁,而如果要抓取的目標網頁沒有相應的手機網頁的話,就會返回意想不到的結果,有的返回404錯誤提示頁,有的返回403錯誤提示頁,有的甚至跳轉到其他網頁去了。
如何解決這個問題?
要解決這個問題,其實很簡單,我們只需要在程序里指定使用的瀏覽器的即可,即是設置UserAgent的參數值。
完整代碼:
C# 代碼 復制/// <summary>方法一:比較推薦
/// 用HttpWebRequest取得網頁源碼
/// 對于帶BOM的網頁很有效,不管是什么編碼都能正確識別
/// </summary>
/// <param name="url">網頁地址" </param>
/// <returns>返回網頁源文件</returns>
public static string GetHtmlSource2(string url)
{
//處理內容
string html = "";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Accept = "*/*"; //接受任意文件
request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.1.4322)"; //
request.AllowAutoRedirect = true;//是否允許302
//request.CookieContainer = new CookieContainer();//cookie容器,
request.Referer = url; //當前頁面的引用
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream stream = response.GetResponseStream();
StreamReader reader = new StreamReader(stream, Encoding.Default);
html = reader.ReadToEnd();
stream.Close();
return html;
}
二、ASP.NET 使用 WebResponse 抓取網頁內容
C# 代碼 復制public static string GetHttpData2(string Url)
{
string sException = null;
string sRslt = null;
WebResponse oWebRps = null;
WebRequest oWebRqst = WebRequest.Create(Url);
oWebRqst.Timeout = 50000;
try
{
oWebRps = oWebRqst.GetResponse();
}
catch (WebException e)
{
sException = e.Message.ToString();
}
catch (Exception e)
{
sException = e.ToString();
}
finally
{
if (oWebRps != null)
{
StreamReader oStreamRd = new StreamReader(oWebRps.GetResponseStream(), Encoding.GetEncoding("utf-8"));
sRslt = oStreamRd.ReadToEnd();
oStreamRd.Close();
oWebRps.Close();
}
}
return sRslt;
}
三、ASP.NET 使用 WebClient 抓取網頁內容
C# 代碼 復制/// <param name="url">/要訪問的網站地址</param>
![]()
新聞熱點
疑難解答