使用HttpWebRequest抓取网页内容
asp.net抓取网页html源代码,我想对于任何一个asp.net程序员来说都不再陌生,这是一个非常简单容易就能实现的功能。下面便是一个通用的asp.net获得网页源代码的程序。
string szUrl = "http://www.webkaka.com/";//要抓取得网页的地址
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(szUrl);//注意:使用HttpWebRequest不能用来抓取保存好的网页,会报错的
//指定抓取时使用的浏览器
request.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506; .NET CLR 3.5.21022; .NET CLR 1.0.3705; .NET CLR 1.1.4322)";
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream hwStream = response.GetResponseStream();
Encoding eData = Encoding.GetEncoding("utf-8");//设置编码,如果抓过来是乱码的话可以试试gb2312,gbk
StreamReader sData = new StreamReader(hwStream, eData);
string szHTML = sData.ReadToEnd();
szHTML就是抓到的网页html源代码了。得到源代码后,就可以进一步各需所用了。
为什么抓取某些页面失败?
不过,有时候我们会发现,这个程序在抓取某些页面时,是获不到所需的内容的,有时候甚至返回404的错误提示页,这是什么原因呢?
其实,很多人都忽略了一个问题,那就是服务器默认的浏览器问题。有的服务器默认的浏览器是手机浏览器,那么,当我抓取这个服务器下的网页是,就相当于用手机浏览器来打开网页,而如果要抓取的目标网页没有相应的手机网页的话,就会返回意想不到的结果,有的返回404错误提示页,有的返回403错误提示页,有的甚至跳转到其他网页去了。
如何解决这个问题?
要解决这个问题,其实很简单,我们只需要在程序里指定使用设置UserAgent的参数值。