java写了一个爬虫,出现Software caused connection abort: recv failed 异常
问题描述: 是这样的,我写了一个爬虫爬取BBC网站上跟中国有关的新闻,但是每次都没爬取几篇就挂掉了,出现:java.net.SocketException: Software caused connection abort: recv failed等异常。我开了5个线程不断调用这个方法去爬取BBC的网页,可能是访问速度比较快,太过频繁,BBC就拒绝我的访问了。我的想法是能不能在哪里设置延时,让访问速度没那么快。我在return语句之前设置了Thread.sleep(随机3秒内); 但结果还是不行。 现在我想到头都爆了~求大神指导...跪求.. 如果可以的话 能联系我在线指导吗? 邮箱:yao.mitcn@qq.com 求好心的大神联系小弟我吧。。。
下面是异常的截图:
这是爬虫爬取页面的代码
Java 爬虫 异常 --------------------编程问答-------------------- 直接用selenium多好 --------------------编程问答-------------------- 顶,最近也遇到同样的问题,请问大神有解决的方法? --------------------编程问答-------------------- 有爬虫就有反爬虫。有时候不是你的代码有问题,而是策略的问题,下面的文章算是一个引导吧:
public String crawler(String url){
/* 1 生成 HttpClinet 对象并设置参数 */
HttpClient httpClient = new HttpClient();
// 设置 Http 连接超时为5秒
httpClient.getHttpConnectionManager().getParams()
.setConnectionTimeout(5000);
/* 2 生成 GetMethod 对象并设置参数 */
GetMethod getMethod = new GetMethod(url);
// 设置 get 请求超时为 5 秒
getMethod.getParams().setParameter(HttpMethodParams.SO_TIMEOUT, 5000);
// 设置请求重试处理,用的是默认的重试处理:请求三次
getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
new DefaultHttpMethodRetryHandler());
StringBuilder sb = new StringBuilder();
/* 3 执行 HTTP GET 请求 */
try {
int statusCode = httpClient.executeMethod(getMethod); //这是出现异常的地方!
/* 4 判断访问的状态码 */
if (statusCode != HttpStatus.SC_OK) {
System.err.println("Method failed: "
+ getMethod.getStatusLine());
}
/* 5 处理 HTTP 响应内容 */
// HTTP响应头部信息,这里简单打印
// 读取为 InputStream,在网页内容数据量大时候推荐使用
InputStream response = getMethod.getResponseBodyAsStream();
InputStreamReader ir = new InputStreamReader(response, chartset);
BufferedReader br = new BufferedReader(ir);
String temp = null;
while ((temp = br.readLine()) != null) {
sb.append(temp);
}
} catch (HttpException e) {
// 发生致命的异常,可能是协议不对或者返回的内容有问题
System.out.println("Please check your provided http address!");
e.printStackTrace();
} catch (IOException e) {
// 发生网络异常
e.printStackTrace();
} catch(Exception e)
{
e.printStackTrace();
System.out.println(url+"爬取失败");
}
finally {
/* 6 .释放连接 */
getMethod.releaseConnection();
}
return sb.toString();
}
http://www.lanceyan.com/tech/arch/snscrawler.html --------------------编程问答-------------------- java.net.SocketException: Software caused connection abort: recv failed 异常分析
http://blog.csdn.net/haydenwang8287/article/details/5793645 --------------------编程问答--------------------
补充:Java , Java SE