ASP.NET抓取网页内容
类别:编程学习 浏览量:1722
时间:2014-9-9 ASP.NET抓取网页内容
ASP.NET抓取网页内容一、ASP.NET 使用HttpWebRequest抓取网页内容
这种方式抓取某些页面会失败
不过,有时候我们会发现,这个程序在抓取某些页面时,是获不到所需的内容的,有时候甚至返回404的错误提示页,这是什么原因呢?
其实,很多人都忽略了一个问题,那就是服务器默认的浏览器问题。有的服务器默认的浏览器是手机浏览器,那么,当我抓取这个服务器下的网页是,就相当于用手机浏览器来打开网页,而如果要抓取的目标网页没有相应的手机网页的话,就会返回意想不到的结果,有的返回404错误提示页,有的返回403错误提示页,有的甚至跳转到其他网页去了。
如何解决这个问题?
要解决这个问题,其实很简单,我们只需要在程序里指定使用的浏览器的即可,即是设置UserAgent的参数值。
完整代码:
/// <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 抓取网页内容
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 抓取网页内容
/// <param name="url">/要访问的网站地址</param>
/// <param name="charSets">目标网页的编码,如果传入的是null或者"",那就自动分析网页的编码</param>
/// <returns></returns>
public static string getHtml(string url, params string[] charSets)
{
try
{
string charSet = null;
if (charSets.Length == 1)
{
charSet = charSets[0];
}
WebClient myWebClient = new WebClient(); //创建WebClient实例myWebClient
// 需要注意的:
//有的网页可能下不下来,有种种原因比如需要cookie,编码问题等等
//这是就要具体问题具体分析比如在头部加入cookie
// webclient.Headers.Add("Cookie", cookie);
//这样可能需要一些重载方法.根据需要写就可以了
//获取或设置用于对向 Internet 资源的请求进行身份验证的网络凭据.
myWebClient.Credentials = CredentialCache.DefaultCredentials;
//如果服务器要验证用户名,密码
//NetworkCredential mycred = new NetworkCredential(struser, strpassword);
//myWebClient.Credentials = mycred;
//从资源下载数据并返回字节数组.(加@是因为网址中间有"/"符号)
byte[] myDataBuffer = myWebClient.DownloadData(url);
string strWebData = Encoding.Default.GetString(myDataBuffer);
//获取网页字符编码描述信息
Match charSetMatch = Regex.Match(strWebData, "<meta([^<]*)charset=([^<]*)", RegexOptions.IgnoreCase | RegexOptions.Multiline);
string webCharSet = charSetMatch.Groups[2].Value;
if (charSet == null || charSet == "")
charSet = webCharSet;
if (charSet != null && charSet != "" && Encoding.GetEncoding(charSet) != Encoding.Default)
{
strWebData = Encoding.GetEncoding(charSet).GetString(myDataBuffer);
}
else
{
strWebData = Encoding.GetEncoding("utf-8").GetString(myDataBuffer);
}
return strWebData;
}
catch (Exception e) { return ""; }
}
标签:Request
您可能感兴趣
- python爬取豆瓣电影评论(python使用requests模块实现爬取电影天堂最新电影信息)
- requests使用自定义cookie(Yii框架中用response保存cookie,用request读取cookie的原理解析)
- phpfpm优化方法(php-fpm超时时间设置request_terminate_timeout资源问题分析)
- Request.Url的值有可能会带端口号
- 从客户端检测到有潜在危险的Request.Form值
- HttpWebRequest的使用
- pythonrequest包设置编码(解决python3中的requests解析中文页面出现乱码问题)
- dedecms参数不显示(织梦DedeCms中出现Safe Alert: Request Error step 1/2 的解决方法)
- pythonrequests怎么导入模块(Python3使用requests模块实现显示下载进度的方法详解)
- python如何安装requests模块(Python常用模块之requests模块用法分析)
- pythonrequests爬虫使用教程(Python 通过requests实现腾讯新闻抓取爬虫的方法)
- Request、Request.Form、Request.QueryString的区别
- Request获取URL的各种信息
- laravel接口请求模拟(Laravel框架控制器的request与response用法示例)
- thinkphp5怎么设置当前的模块(thinkPHP5.1框架中Request类四种调用方式示例)
- python爬虫入门代码(python爬虫基础教程:requests库二代码实例)
- 入秋后的第二场苹果发布会来了 全新M1系列芯片登场(入秋后的第二场苹果发布会来了)
- 苹果正式发布自研芯片M1 5nm 32核心 彻底放弃Intel(苹果正式发布自研芯片M1)
- 苹果自研芯片跑分对比 A16芯片排名靠后,M1系列霸榜(苹果自研芯片跑分对比)
- X86处理器的梦魇 苹果M1自研芯片到底有多强(苹果M1自研芯片到底有多强)
- 泰剧《爱欲之神》Boom kitkong和Great合体杂志(泰剧爱欲之神Boomkitkong和Great合体杂志)
- 素人恋爱综艺火药味十足 男生为赢得芳心集体扯头花,真是出好戏(素人恋爱综艺火药味十足)
热门推荐
- dockerfile自定义镜像图解(Docker images导出和导入操作)
- python语句for循环(Python基础之循环语句用法示例for、while循环)
- dedecms安全验证(dede验证码错误 dede验证码一直提示错误的解决方法)
- SQL中Exists的用法
- python使用什么函数定义匿名函数(Python匿名函数及应用示例)
- sql server中cxpacket等待
- docker 镜像mysql(解决docker拉取mysql镜像太慢的情况)
- JavaScript 阻止超链接跳转的操作方法(多种写法)(JavaScript 阻止超链接跳转的操作方法多种写法)
- sqlsever查看视图数据类型(SQL Sever查询语句大全集锦)
- phpstudy报错(phpStudy运行帝国备份王出错解决方法)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9