C# 多线程爬虫爬取网页问题

weixinyaojinNUS 2013-04-04 08:50:22
string ans = "";
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
request.ContentType = "text/html";
request.Method = "GET";
HttpWebResponse res;
Stream st;
StreamReader sr=null;
Encoding toword;
try
{
res = (HttpWebResponse)request.GetResponse();
}
catch (WebException ex)
{
res = (HttpWebResponse)ex.Response;
}

if (res.ToString() == null)
return ans;
st = res.GetResponseStream();
toword = null;
if (!encode.ToUpper().Equals("UTF8"))
{
toword = Encoding.GetEncoding(encode);
}
else
{
toword = Encoding.UTF8;
}

try
{
sr = new StreamReader(st, toword);
ans = sr.ReadToEnd();
sr.Close();
st.Close();
}
catch (WebException ex)
{
Console.WriteLine(ex.ToString());
sr.Close();
st.Close();
}
return ans;
用C#写的多线程爬虫,主要是用了HttpWebRequest和HttpWebResponse做的,在运行过程中,设定5个爬虫,爬取某网站上10000个网页,开始没有问题,但是运行一段时间后报这样的异常:System.IO.IOException 无法从传输连接中读取数据: 远程主机强迫关闭了一个现有的连接 ---> System.Net.Sockets.SocketException: 远程主机强迫关闭了一个现有的连接。
在 System.Net.Sockets.NetworkStream.Read--- 内部异常堆栈跟踪的结尾 ---
在 System.IO.StreamReader.ReadToEnd()
有的时候可以成功爬取6000多个网页,有时候几百个就报这个异常,在网上看了很多解决方案都不行啊,我看的方法有:1,把getResponse方法放到Try。。。catch块里面去; 2.把防火墙关掉 但是都不行,我怀疑是长时间爬取一个网站,被它服务器的安全措施给拒绝连接了。
...全文
352 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixinyaojinNUS 2013-04-07
  • 打赏
  • 举报
回复
引用 5 楼 winner2050 的回复:
网络报错不属于程序逻辑异常,应该用try给屏蔽掉异常信息。 轻而易举就崩溃,怎么当爬虫?
但是我已经把出错的ReadToEnd这条代码放到Try...Catch里面去了啊
winner2050 2013-04-06
  • 打赏
  • 举报
回复
if (res.ToString() == null) return ans; 这个代码严重错误。
winner2050 2013-04-06
  • 打赏
  • 举报
回复
网络报错不属于程序逻辑异常,应该用try给屏蔽掉异常信息。 轻而易举就崩溃,怎么当爬虫?
weixinyaojinNUS 2013-04-06
  • 打赏
  • 举报
回复
引用 2 楼 nice_fish 的回复:
1.采集的时候要模拟人的行为,不要过于频繁,将参数带全,适当的休息一下 2.考虑使用代理或者更换IP
我也想过通过运行一段时间让这几个线程休息一会儿,但是如何做到啊?我看了很多关于多线程暂停和重启的资料,还是没搞懂。。。
  • 打赏
  • 举报
回复
system.thread.sleep(1*1000);
  • 打赏
  • 举报
回复
1.采集的时候要模拟人的行为,不要过于频繁,将参数带全,适当的休息一下 2.考虑使用代理或者更换IP
XiAnTianYiChuanMei 2013-04-04
  • 打赏
  • 举报
回复
是的,,,,服务器如果做了处理,当同一IP访问次数过多,就会被认为是 采集器来了,就会做出相应,,,,,www.aaspx.com 个人观点,,

110,500

社区成员

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

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

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