StreamReader读流,中断,困扰好久了

qq904492758 2013-05-21 08:38:08
下面是代码,代码没有问题 读别的页 一般没有问题,但是读带有百度百科的 到了百科就中断, 就返回字符串了。不是完整的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;

}


...全文
358 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq904492758 2013-05-22
  • 打赏
  • 举报
回复
在线等待。。。
qq904492758 2013-05-21
  • 打赏
  • 举报
回复
呵呵。正则我会,也在用。现在关键问题不能把全部的html 代码得到。。没有办法匹配呀 要是都得到了,我就可以查到了。 现在上面的办法只能是 得到百度百科上面的代码,要是 这个页面上没有百度百科 完全没有问题 但是一般的都有,就是得不到后面的代码。所以没有办法获得排名
引用 14 楼 jiaoshiyao 的回复:
引用 13 楼 qq904492758 的回复:
不是。字符串编码我搞清楚了 我想问的 是为什么 StreamReader 遇到特殊符号就 停了,看看有什么过滤的方法或者 什么办法让我把搜搜的排名 获取到就行了 [quote=引用 12 楼 jiaoshiyao 的回复:] 我想知道 你在问什么 字符串编码问题?
只能用神器了 正则[/quote]
jiaoshiyao 2013-05-21
  • 打赏
  • 举报
回复
引用 13 楼 qq904492758 的回复:
不是。字符串编码我搞清楚了 我想问的 是为什么 StreamReader 遇到特殊符号就 停了,看看有什么过滤的方法或者 什么办法让我把搜搜的排名 获取到就行了
引用 12 楼 jiaoshiyao 的回复:
我想知道 你在问什么 字符串编码问题?
只能用神器了 正则
qq904492758 2013-05-21
  • 打赏
  • 举报
回复
不是。字符串编码我搞清楚了 我想问的 是为什么 StreamReader 遇到特殊符号就 停了,看看有什么过滤的方法或者 什么办法让我把搜搜的排名 获取到就行了
引用 12 楼 jiaoshiyao 的回复:
我想知道 你在问什么 字符串编码问题?
jiaoshiyao 2013-05-21
  • 打赏
  • 举报
回复
我想知道 你在问什么 字符串编码问题?
qq904492758 2013-05-21
  • 打赏
  • 举报
回复
qq904492758 2013-05-21
  • 打赏
  • 举报
回复
它里面有个� 这个东西就停了, StreamReader 就认为读完了。但是有点页面什么也没有,看着连个空格都没有,读到百科照样的停掉了
引用 9 楼 woanon 的回复:
百科裏面的html是不是中間故意設置了終止符>或者 -->
woanon 2013-05-21
  • 打赏
  • 举报
回复
百科裏面的html是不是中間故意設置了終止符>或者 -->
qq904492758 2013-05-21
  • 打赏
  • 举报
回复
还在吗。你有这个问题吗??
引用 2 楼 liuchaolin 的回复:
qq904492758 2013-05-21
  • 打赏
  • 举报
回复
我用的方法也可以。你可以都试试,读取网页不成问题。就是读 搜搜 有百科的页面。死活过不去
引用 6 楼 City_member 的回复:
路过,学习,看到二楼的方法很好
City_member 2013-05-21
  • 打赏
  • 举报
回复
路过,学习,看到二楼的方法很好
qq904492758 2013-05-21
  • 打赏
  • 举报
回复
我是要操作这个字符串 ,不是直接request,这样是没错但是 你如果把返回的字符串 放到即时窗口 或者用文本可视化工具看一下。就只有一部分呀????
引用 2 楼 liuchaolin 的回复:
qq904492758 2013-05-21
  • 打赏
  • 举报
回复
我用你的方法 只能读到百科。。不能把全部的读到
引用 2 楼 liuchaolin 的回复:
qq904492758 2013-05-21
  • 打赏
  • 举报
回复
用你的方法调用 ,一样不能把html 全部的读到呀,,, GetHtml("http://www.soso.com/q?pid=s.idx&cid=s.idx.se&w=%D1%B5%C1%B7%CB%FE");
引用 1 楼 liuchaolin 的回复:
// 获取网页的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; } } //以上方法应该是目前最优的
md5e 2013-05-21
  • 打赏
  • 举报
回复
md5e 2013-05-21
  • 打赏
  • 举报
回复
// 获取网页的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; } } //以上方法应该是目前最优的
qq904492758 2013-05-21
  • 打赏
  • 举报
回复
大星星没都午休呢吗
引用 2 楼 liuchaolin 的回复:
qq904492758 2013-05-21
  • 打赏
  • 举报
回复
上去

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧