
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();
网页稍微复杂一点就无法完全抓取~! 展开
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();
网页稍微复杂一点就无法完全抓取~! 展开
6个回答
展开全部
汗,你这个代码,太简单了,也太不全面了。
不多说了,之前都写了,极其详尽的教程了。
自己看就好了。
先看这个:
【整理】关于抓取网页,分析网页内容,模拟登陆网站的逻辑/流程和注意事项
搞懂逻辑。
再用工具,分析你所要处理的网站的逻辑:
【教程】手把手教你如何利用工具(IE9的F12)去分析模拟登陆网站(百度首页)的内部逻辑过程
如果是复杂的值,参考这个去分析:
【教程】如何利用IE9的F12去分析网站登陆过程中的复杂的(参数,cookie等)值(的来源)
然后才是写代码实现。
简单的网页内容提取,可以参考:
【教程】抓取网并提取网页中所需要的信息 之 C#版
复杂的,模拟登陆,可以参考:
【教程】模拟登陆网站 之 C#版(内含两种版本的完整的可运行的代码)
另外,期间会涉及的一些知识:
【整理】关于http(GET或POST)请求中的url地址的编码(encode)和解码(decode)
如果都看完了。
你就会发现,你这点代码,也忒。。。。。
(此处不给贴地址,请用google搜标题,即可找到帖子地址)
不多说了,之前都写了,极其详尽的教程了。
自己看就好了。
先看这个:
【整理】关于抓取网页,分析网页内容,模拟登陆网站的逻辑/流程和注意事项
搞懂逻辑。
再用工具,分析你所要处理的网站的逻辑:
【教程】手把手教你如何利用工具(IE9的F12)去分析模拟登陆网站(百度首页)的内部逻辑过程
如果是复杂的值,参考这个去分析:
【教程】如何利用IE9的F12去分析网站登陆过程中的复杂的(参数,cookie等)值(的来源)
然后才是写代码实现。
简单的网页内容提取,可以参考:
【教程】抓取网并提取网页中所需要的信息 之 C#版
复杂的,模拟登陆,可以参考:
【教程】模拟登陆网站 之 C#版(内含两种版本的完整的可运行的代码)
另外,期间会涉及的一些知识:
【整理】关于http(GET或POST)请求中的url地址的编码(encode)和解码(decode)
如果都看完了。
你就会发现,你这点代码,也忒。。。。。
(此处不给贴地址,请用google搜标题,即可找到帖子地址)
展开全部
把response.GetResponseStream()定向到文件流,再打开就可以了.
应该是你自定义的缓冲区问题.
应该是你自定义的缓冲区问题.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你要做小偷程序啊?
#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
#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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Stream.Read 时只有返回的count 为0时才读完。所以应该在while中读取数据,直到返回0为止。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
改一下。
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);
}
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);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询