c#抓取网页内容 抓不全怎么办? 求高手解答 50

byte[]buf=newbyte[1000000];stringtextbox=textBox1.Text;HttpWebRequestrequest;if(textb... byte[] buf = new byte[1000000];
string textbox = textBox1.Text;
HttpWebRequest request;
if (textbox.StartsWith("http://"))
request = (HttpWebRequest)WebRequest.Create(textBox1.Text);
else request = (HttpWebRequest)WebRequest.Create("http://"+textBox1.Text);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream resStream = response.GetResponseStream();
int count = resStream.Read(buf,0, buf.Length);
textBox2.Text=Encoding.Default.GetString(buf, 0, count);
resStream.Close();

网页稍微复杂一点就无法完全抓取~!
展开
 我来答
againinput4
2012-12-07 · TA获得超过2407个赞
知道大有可为答主
回答量:1446
采纳率:70%
帮助的人:677万
展开全部
汗,你这个代码,太简单了,也太不全面了。
不多说了,之前都写了,极其详尽的教程了。
自己看就好了。

先看这个:
【整理】关于抓取网页,分析网页内容,模拟登陆网站的逻辑/流程和注意事项
搞懂逻辑。

再用工具,分析你所要处理的网站的逻辑:
【教程】手把手教你如何利用工具(IE9的F12)去分析模拟登陆网站(百度首页)的内部逻辑过程

如果是复杂的值,参考这个去分析:
【教程】如何利用IE9的F12去分析网站登陆过程中的复杂的(参数,cookie等)值(的来源)

然后才是写代码实现。

简单的网页内容提取,可以参考:
【教程】抓取网并提取网页中所需要的信息 之 C#版

复杂的,模拟登陆,可以参考:
【教程】模拟登陆网站 之 C#版(内含两种版本的完整的可运行的代码)

另外,期间会涉及的一些知识:
【整理】关于http(GET或POST)请求中的url地址的编码(encode)和解码(decode)

如果都看完了。

你就会发现,你这点代码,也忒。。。。。

(此处不给贴地址,请用google搜标题,即可找到帖子地址)
fastspeeed
2012-12-07 · TA获得超过277个赞
知道小有建树答主
回答量:535
采纳率:0%
帮助的人:486万
展开全部
把response.GetResponseStream()定向到文件流,再打开就可以了.

应该是你自定义的缓冲区问题.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
飒爽且敏锐灬风光3004
2012-12-07 · 超过14用户采纳过TA的回答
知道答主
回答量:96
采纳率:0%
帮助的人:43.3万
展开全部
你要做小偷程序啊?
#region 获取页面信息
public static string getAllPage(string url)
{
try
{
WebRequest request = WebRequest.Create(url);
WebResponse response = request.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding("utf-8"));
string strContent = reader.ReadToEnd();
reader.Close();
reader.Dispose();
response.Close();
if (strContent != null)
{
return strContent;
}
else
{
return "0";
}

}
catch
{
return "1";

}
} #endregion
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
哲事姓无
2012-12-06 · TA获得超过1177个赞
知道小有建树答主
回答量:903
采纳率:100%
帮助的人:468万
展开全部
Stream.Read 时只有返回的count 为0时才读完。所以应该在while中读取数据,直到返回0为止。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
新康利0s
2012-12-07 · TA获得超过148个赞
知道小有建树答主
回答量:225
采纳率:0%
帮助的人:92.2万
展开全部
改一下。
int count = resStream.Read(buf,0, buf.Length);
while(count>0)
{
textBox2.Text += Encoding.Default.GetString(buf, 0, count);
count = resStream.Read(buf,0, buf.Length);

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式