爬虫不知道什么原因停顿很长时间


我用httpclient爬取页面,我有设置爬取频率,最长时间是休息10分钟,但是爬取的过程中有出现几个小时的停顿,然后继续运行,我用的是httpclient4.3.1版本,有设置setSocketTimeout(2000),.setConnectTimeout(2000),不知道是什么原因出现这么长时间的停顿,望各位高手能够指点一下,这是我设置频率的代码
                if(count==0){//第一个页面
//System.out.println("set first time");
setFirstTime();
}else{
long timeDiffer=getTimeDiffer();//两次连接的实际间隔时间
Random randomCount=new Random();
int intervalTime=(randomCount.nextInt(4)+1)*1000;//任意1-5秒之间请求间隔,希望的请求间隔
if(timeDiffer<intervalTime){//如果两次链接时间差小于希望的请求间隔
long sleepTime=intervalTime-timeDiffer;
try{
System.out.println("休息"+sleepTime);
         Thread.sleep(sleepTime);//休息一下爬取下一个Url
         //System.out.println("sleep"+sleepTime+"  over");
         }catch(InterruptedException e){
         e.printStackTrace();
         }
}
}
//System.out.println(getTimeDiffer());
//设置爬取1000页后休息10分钟
if(count%1000==0&&count>0){
try{
         Thread.sleep(600000);//600000是10分钟
         }catch(InterruptedException e){
         e.printStackTrace();
         }
}

6 个解决方案

#1


通过日志定位一下停顿在什么位置

#2


httpclient抓取网页内容需要时间很长 视网络情况而定。
没玩过爬虫,单看着楼主问题和大家回复,学习了。

#3


引用 1 楼 ygycomon 的回复:
通过日志定位一下停顿在什么位置

我是新手,编程没多久,不知道怎么用日志定位,能说的详细点吗

#4


引用 3 楼 zjz_52 的回复:
Quote: 引用 1 楼 ygycomon 的回复:

通过日志定位一下停顿在什么位置

我是新手,编程没多久,不知道怎么用日志定位,能说的详细点吗

httpclient爬去页面,听说经常会导致程序死掉。

#5


引用 4 楼 abc_key 的回复:
Quote: 引用 3 楼 zjz_52 的回复:

Quote: 引用 1 楼 ygycomon 的回复:

通过日志定位一下停顿在什么位置

我是新手,编程没多久,不知道怎么用日志定位,能说的详细点吗

httpclient爬去页面,听说经常会导致程序死掉。

我那个没死掉,就是停了,有点像sleep,几个小时后继续运行了

#6


log4j  日志打印出来再分析
智能推荐

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
© 2014-2019 ITdaan.com 粤ICP备14056181号  

赞助商广告