下面是代码,代码没有问题 读别的页 一般没有问题,但是读带有百度百科的 到了百科就中断, 就返回字符串了。不是完整的html代码。只有一部分;不知道怎么处理了。。
请各位帮帮忙,困扰好久了。//调用
GetHtml("http://www.soso.com/q?pid=s.idx&cid=s.idx.se&w=%D1%B5%C1%B7%CB%FE");  public string GetHtml(string url)
        {
            //判断网页编码
            Encoding wCode;
            string PostPara = "";
            CookieContainer CookieCon = new CookieContainer();
            HttpWebRequest wReq;
            wReq = (HttpWebRequest)WebRequest.Create(@url);
            wReq.UserAgent = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.0; .NET CLR 1.1.4322; .NET CLR 2.0.50215;)";
            Match a = Regex.Match(url, @"(http://).[^/]*[?=/]", RegexOptions.IgnoreCase);
            string url1 = a.Groups[0].Value.ToString();
            wReq.Referer = url1;
            wReq.Method = "GET";
            //设置页面超时时间为12秒
            wReq.Timeout = 12000;
            HttpWebResponse wResp = (HttpWebResponse)wReq.GetResponse();
            System.IO.Stream respStream = wResp.GetResponseStream();
            string strWebData = "";
            try
            {                string cType = wResp.ContentType.ToLower();
                Match charSetMatch = Regex.Match(cType, "(?<=charset=)([^<]*)*", RegexOptions.IgnoreCase | RegexOptions.Multiline);
                string webCharSet = charSetMatch.ToString();
                wCode = System.Text.Encoding.GetEncoding(webCharSet);
            }
            catch
            {
                wCode = Encoding.Default;
            }
            if (wResp.ContentEncoding == "gzip")
            {
                GZipStream myGZip = new GZipStream(respStream, CompressionMode.Decompress);
                System.IO.StreamReader reader;
                reader = new System.IO.StreamReader(myGZip, wCode);
                strWebData = reader.ReadToEnd();
                reader.Close();
                reader.Dispose();
            }
            else
            {
                System.IO.StreamReader reader;
                reader = new System.IO.StreamReader(respStream, wCode);
                strWebData = reader.ReadToEnd();
                reader.Close();
                reader.Dispose();
            }
            //  this.m_WebpageSource = strWebData;
            return strWebData;        }
        

解决方案 »

  1.   

        // 获取网页的HTML内容,根据网页的charset自动判断Encoding   
        public string GetHtml(string url)
        {
            return GetHtml(url, null);
        }
        // 获取网页的HTML内容,指定Encoding   
        public string GetHtml(string url, Encoding encoding)
        {
            byte[] buf = new WebClient().DownloadData(url);
            if (encoding != null) return encoding.GetString(buf);
            string html = Encoding.UTF8.GetString(buf);
            encoding = GetEncoding(html);
            if (encoding == null || encoding == Encoding.UTF8) return html;
            return encoding.GetString(buf);
        }
        // 根据网页的HTML内容提取网页的Encoding   
        public Encoding GetEncoding(string html)
        {
            string pattern = @"(?i)\bcharset=(?<charset>[-a-zA-Z_0-9]+)";
            string charset = Regex.Match(html, pattern).Groups["charset"].Value;
            try
            {
                return Encoding.GetEncoding(charset);
            }
            catch (ArgumentException)
            {
                return null;
            }
        } 
    //以上方法应该是目前最优的
      

  2.   

    用你的方法调用 ,一样不能把html 全部的读到呀,,,
    GetHtml("http://www.soso.com/q?pid=s.idx&cid=s.idx.se&w=%D1%B5%C1%B7%CB%FE");
      

  3.   

    我是要操作这个字符串 ,不是直接request,这样是没错但是 你如果把返回的字符串 放到即时窗口
    或者用文本可视化工具看一下。就只有一部分呀????
      

  4.   

    百科裏面的html是不是中間故意設置了終止符>或者 -->
      

  5.   

    它里面有个� 这个东西就停了,
    StreamReader 就认为读完了。但是有点页面什么也没有,看着连个空格都没有,读到百科照样的停掉了
      

  6.   

     不是。字符串编码我搞清楚了 我想问的 是为什么
    StreamReader 遇到特殊符号就  停了,看看有什么过滤的方法或者
    什么办法让我把搜搜的排名 获取到就行了
      

  7.   

    呵呵。正则我会,也在用。现在关键问题不能把全部的html 代码得到。。没有办法匹配呀
    要是都得到了,我就可以查到了。
    现在上面的办法只能是 得到百度百科上面的代码,要是 这个页面上没有百度百科  完全没有问题
    但是一般的都有,就是得不到后面的代码。所以没有办法获得排名 只能用神器了 正则