html源码解析不一致问题

snowbirdfly 2009-05-18 09:13:37
对了,最近遇到一个问题:
获取HTML源码,方法如下:
方法一:

string netUrl = "http://store.taobao.com/shop/view_shop.htm?asker=wangwang&shop_nick=琳子68"
WebClient client = new WebClient();
byte[] page = client.DownloadData(netUrl);
string content = System.Text.Encoding.GetEncoding("gb2312").GetString(page);

方法二:

string netUrl = "http://store.taobao.com/shop/view_shop.htm?asker=wangwang&shop_nick=琳子68";
HttpWebRequest myWebRequest = (HttpWebRequest)WebRequest.Create(netUrl);
WebResponse resp = myWebRequest.GetResponse();
StreamReader oStreamRd = new StreamReader(resp.GetResponseStream(), Encoding.GetEncoding("GB2312"));
string content = oStreamRd.ReadToEnd();

但是采用这两种方法所得到的html源代码和我通过浏览器:查看->源文件,得到的数据是不同的,方法得到的数据少了中间一段很长的数据,很奇怪.
所以问问大伙遇到这种问题没有,请指教,在线等,谢谢~~~
...全文
261 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
xue1234567890 2009-05-30
  • 打赏
  • 举报
回复
学习...
snowbirdfly 2009-05-20
  • 打赏
  • 举报
回复
求高手解答~~~
解答完就给分~~~
在线等~~~
yanke189 2009-05-20
  • 打赏
  • 举报
回复
拿分走人
xu_hfut 2009-05-20
  • 打赏
  • 举报
回复
路过,关注!
snowbirdfly 2009-05-20
  • 打赏
  • 举报
回复
恩,我当初也是这么认为,但是有些用户是可以解析的啊?
这个似乎又理解不通了~~~
Simonzy 2009-05-20
  • 打赏
  • 举报
回复
12楼正解
白云在上 2009-05-19
  • 打赏
  • 举报
回复
具体是少了什么东西?是不是动态内容?DownloadData不支持动态内容
rekym 2009-05-19
  • 打赏
  • 举报
回复
内容不一样吧
fivecapable 2009-05-19
  • 打赏
  • 举报
回复
路过
oldnew 2009-05-19
  • 打赏
  • 举报
回复
应该是动态内容不一样的。

浏览器有javascript等脚本引擎,所以页面的脚本方法浏览器会去执行,但普通的socket,webclient,webrequest等没有脚本引擎,所以脚本产生的动态内容是无法下载就能得到的。

要想得到,一个 使用webbrowser控件打开网页,然后访问webbrowser的IDocment对象得到页面内容,这里就和浏览器查看源码的内容一摸一样了, 另外方法更复杂,就是找一个javascript的引擎,自己运行一把脚本咯
eibo520 2009-05-19
  • 打赏
  • 举报
回复
socket,怎么都一样...
snowbirdfly 2009-05-19
  • 打赏
  • 举报
回复
不是,很奇怪,我测试有些用户是正确的,有些用户则会出现不一致问题~~~
Neil198 2009-05-19
  • 打赏
  • 举报
回复
那些代码是JS产生的么? 关注
redhat4 2009-05-19
  • 打赏
  • 举报
回复
关注


.


人力资源
snowbirdfly 2009-05-19
  • 打赏
  • 举报
回复
感谢楼上大哥的回答,中间很长一段数据被丢失了~~~
通过DownloadData是没有获取到和查看源文件相同的数据,两者之间数据差别还是比较大的~~~
后者数据量比较大,我想贴出来,但是太长了~
snowbirdfly 2009-05-18
  • 打赏
  • 举报
回复
请高手回答一下~~~
在线等~~~
snowbirdfly 2009-05-18
  • 打赏
  • 举报
回复
读取的不一样?
那我这么样才能得到像通过浏览器:查看->源文件,这样的数据呢?
ws_hgo 2009-05-18
  • 打赏
  • 举报
回复
读取的的不一样
snowbirdfly 2009-05-18
  • 打赏
  • 举报
回复
DownloadString()的源代码片段:

WebRequest request;
byte[] bytes = this.DownloadDataInternal(address, out request);
string retValue = this.GuessDownloadEncoding(request).GetString(bytes);

它的实现原理是把数据下载回来,形式是byte[],然后猜测数据的编码,实际上也是相当于调用了DownloadData~~~
原理是这样,我测试了也是不行的,还是感谢回答,呵呵~~~
美福种田伯 2009-05-18
  • 打赏
  • 举报
回复
byte[] page = client.DownloadData(netUrl);
这句可以改成
client.DownloadString试试

110,538

社区成员

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

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

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