ASP.NET抓取网页内容

原文:ASP.NET抓取网页内容

一、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>
/// <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 ""; }
        }
时间: 2024-12-21 20:19:37

ASP.NET抓取网页内容的相关文章

ASP.NET抓取网页内容的实现方法

 这篇文章主要介绍了ASP.NET抓取网页内容的实现方法,涉及使用HttpWebRequest及WebResponse抓取网页内容的技巧,需要的朋友可以参考下     本文实例讲述了ASP.NET抓取网页内容的实现方法.分享给大家供大家参考.具体实现方法如下: 一.ASP.NET 使用HttpWebRequest抓取网页内容 代码如下: /// <summary>方法一:比较推荐 /// 用HttpWebRequest取得网页源码 /// 对于带BOM的网页很有效,不管是什么编码都能正确识别

ASP.NET抓取网页内容的实现方法_实用技巧

本文实例讲述了ASP.NET抓取网页内容的实现方法.分享给大家供大家参考.具体实现方法如下: 一.ASP.NET 使用HttpWebRequest抓取网页内容 复制代码 代码如下: /// <summary>方法一:比较推荐  /// 用HttpWebRequest取得网页源码  /// 对于带BOM的网页很有效,不管是什么编码都能正确识别  /// </summary>  /// <param name="url">网页地址" </

Asp 使用 Microsoft.XMLHTTP 抓取网页内容并过滤需要的_应用技巧

Asp 使用 Microsoft.XMLHTTP 抓取网页内容(没用乱码),并过滤需要的内容 示例源码: 复制代码 代码如下: <% Dim xmlUrl,http,strHTML,strBody xmlUrl = Request.QueryString("u") REM 异步读取XML源 Set http = server.CreateObject("Microsoft.XMLHTTP") http.Open "POST",xmlUrl,

Asp 使用 Microsoft.XMLHTTP 抓取网页内容并过滤需要的

Asp 使用 Microsoft.XMLHTTP 抓取网页内容(没用乱码),并过滤需要的内容 示例源码: 复制代码 代码如下: <% Dim xmlUrl,http,strHTML,strBody xmlUrl = Request.QueryString("u") REM 异步读取XML源 Set http = server.CreateObject("Microsoft.XMLHTTP") http.Open "POST",xmlUrl,

PHP 用QueryList抓取网页内容

原文:PHP 用QueryList抓取网页内容 之前抓取网页数据都是用Java Jsoup,前几天听说用PHP抓更方便,今天就研究了一下,主要是用QueryList来实现. QueryList是一个基于phpQuery的通用列表采集类,是一个简单. 灵活.强大的采集工具,采集任何复杂的页面 基本上就一句话就能搞定了.   直接拿博客园举例子了,http://www.cnblogs.com/ 我们用QueryList来抓取红框里面的内容     查看网页源代码找到红框的位置 1 <div id=&qu

零基础写python爬虫之使用urllib2组件抓取网页内容_python

版本号:Python2.7.5,Python3改动较大,各位另寻教程. 所谓网页抓取,就是把URL地址中指定的网络资源从网络流中读取出来,保存到本地.  类似于使用程序模拟IE浏览器的功能,把URL作为HTTP请求的内容发送到服务器端, 然后读取服务器端的响应资源. 在Python中,我们使用urllib2这个组件来抓取网页. urllib2是Python的一个获取URLs(Uniform Resource Locators)的组件. 它以urlopen函数的形式提供了一个非常简单的接口. 最简

如何用VC++抓取网页内容.

问题描述 请教一下,如何用VC++抓取网页内容,就是类似网页源文件这种东西. 解决方案 解决方案二:你google一下VC,httpclient,一大堆的例子.如果要更熟悉一下底层,可以读一读http协议的规范.解决方案三:引用1楼iihero的回复: 你google一下VC,httpclient,一大堆的例子.如果要更熟悉一下底层,可以读一读http协议的规范. 你好,我这里有一个例子,但是自己很多地方还不懂,想请教下你.////////////////////////////////////

PHP抓取网页内容的方法

PHP抓取网页内容的方法 PHP抓取页面的内容在实际的开发当中是非常有用的,如作一个简单的内容采集器,提取网页中的部分内容等等,抓取到的内容在通过正则表达式做一下过滤就得到了你想要的内容,至于如何用正则表达式过滤,在这里就不做介绍了,有兴趣的同学可以参考板块:http://111cn.net/articles11.shtml,以下就是几种常用的用php教程抓取网页中的内容的方法. 1.file_get_contents PHP代码 <?php    $url = "http://www.1

asp 利用 xmlhttp 抓取网页内容

xml|网页 xmlhttp抓取网页,最近在博客园里看到了这篇文章,于是就顺便贴到blog上,原url:http://www.cnblogs.com/hover/archive/2004/10/09/36212.aspx     (博客园-翱翔.Net Blog) 抓取网页.偶要实现实实更新天气预报.利用了XMLHTTP组件,抓取网页的指定部分.需要分件html源代码此例中的被抓取的html源代码如下<p align=left>2004年8月24日星期二:白天:晴有时多云南风3-4级:夜间:晴