最近做个项目,要提交一些数据给这些搜索引擎然后把返回的列表页面中的快照页面爬回来再做WEB数据挖掘.但是由于各个搜索引擎都有自己的监控机制.持续的爬取或导致自己的ip被封一段时间.于是我就采取了以代理服务器为主的策略来爬,但是效果很不理想.通过代理服务器来爬肯定速度会变慢,我在网上找了大概几百个代理,然后有专门的程序在定时维护和更新这些代理是否可用和效率如何.我会挑出效率最好的前20个代理来用.我的策略是自己的服务器爬1分钟,代理爬20分钟.如果一个代理有连续5次爬取失败便继续用下一个代理.现在遇到的问题如下:
1.程序刚启动时的一段时间内还算正常,但是时间长了就开始不停的报异常,比如java.net.SocketTimeoutException: connect timed out
java.net.ConnectException: Connection refused
还有一个是unexpected end of file异常
还有就是connect reset异常
出现这些异常也不奇怪,但是他就一直这样的报下去,导致一个网页也抓不回来.我把程序停掉再重新开始就正常了,然后过一段时间又不行了.尤其是sogou,这种情形很明显,baidu还好,有时候持续抓个1天都可以.望有经验的大侠指点.
------解决方案--------------------
...
------解决方案--------------------
帮顶
------解决方案--------------------
用多线程抓数据,再用一个定时任务检查这些线程是否出现异常,如有异常,则延时一段时间后把他销毁,再新开一个。
------解决方案--------------------
感觉用代理不是个好办法。。。因为代理经常会失效的。。。除非你把你公司的所有机器设置为代理服务器。。。
------解决方案--------------------
我也想学