Java 关于爬虫礼貌和交叉验证我是否做得对?

Java 关于爬虫礼貌和交叉验证我是否做得对?,java,web-crawler,Java,Web Crawler,我正试图为我的项目构建一个爬虫程序,刚刚遇到了礼貌问题[我已经理解了它的必要性]。我从以下java代码开始: try{ URL seedPage = new URL("SeedPage to fetch"); BufferedReader br = new BufferedReader(new InputStreamReader(seedPage.openStream())); String line=""; while(null != (line = br.readLine()

我正试图为我的项目构建一个爬虫程序,刚刚遇到了礼貌问题[我已经理解了它的必要性]。我从以下java代码开始:

try{
  URL seedPage = new URL("SeedPage to fetch");
  BufferedReader br = new BufferedReader(new InputStreamReader(seedPage.openStream()));
  String line="";
  while(null != (line = br.readLine()){
     TimeUnit.SECONDS.sleep(2) //2 seconds of delay here and the question lies here.
     //do Something
  }
} catch (Exception ex){
}

我这样做[礼貌]对吗?我希望我没有给处理我的请求的服务器带来任何负担。

服务器发送页面的速度越快,接收页面的速度就越好。毕竟,人们使用Firefox之类的网络浏览器,并且尽可能快地接收每个页面

当你想阅读多个页面时,礼貌问题就会出现,通常是通过阅读每页的链接。那么最合适的行为就是你,人类阅读每个网站的使用条款,看看他们说你可以做什么。下一个替代行为是在同一站点上阅读一个页面和阅读下一个页面之间设置延迟。毕竟,人们不会一页一页地移动


您应该知道,如果某些站点判断您的爬虫程序有滥用行为,该站点可能会在一段时间内拒绝响应来自您的internet地址的任何请求。

延迟读取单个元素实际上会阻塞一个服务器插槽,因此这是一种不礼貌的行为(尽管这意味着礼貌)。正如minopret所指出的,在单个请求后暂停并同时释放连接可能是对服务器更友好的一种方式。如果一次只执行一个请求,即使没有延迟,这对任何服务器都不会是问题,但是站点策略可能会说一些其他的事情

但更重要的一点是,您应该尊重
robots.txt
文件,并避免爬行被排除在其中的元素

你也应该发送你收到的cookies,否则一些网站会为你的每一个请求打开新的会话。在会话超时之前,这可能会不必要地消耗资源