Java爬虫搜索原理实现

简介:

permike 原文 Java爬虫搜索原理实现

没事做,又研究了一下爬虫搜索,两三天时间总算是把原理闹的差不多了,基本实现了爬虫搜索的原理,本次实现还是俩程序,分别是按广度优先和深度优先完成的,广度优先没啥问题,深度优先请慎用,有极大的概率会造成死循环情况,下面深度优先的测试网站就造成了死循环。。。。好吧,我承认是我人品不太好。。。下面有请代码君出场~~~~~~~~~~~~~~~

1.广度优先

 

[java]  view plain copy
 
  1. /** 
  2.  * 完成广度优先搜索 
  3.  */ package import import import import import import import import import importimport /** 
  4.  * @author 魏诗尧 
  5.  * @version 1.8 
  6.  * @emali inwsy@hotmail.com 
  7.  */ publicclass   
  8. privatevoid   
  9. null   
  10. null   
  11. null try   
  12. new   
  13.   
  14.   
  15. new bytenewbyte1024 int;  
  16.   
  17. while)) != -) {  
  18. , len);  
  19.   
  20. new);  
  21. catch );  
  22. finally try   
  23. ifnull ifnull catch   
  24. privatevoid   
  25. null null null try   
  26. newtrue new);  
  27. newnew   
  28. whilenull   
  29.   
  30.   
  31. while );  
  32.   
  33. if) {  
  34. continue if) == ) {  
  35. continue if)) {  
  36. continue if) != -) {  
  37. continue if) != -) {  
  38. continue if)) {  
  39. continue   
  40.   
  41. );  
  42. catch );  
  43. finally   
  44. try ifnull ifnull ifnull catch   
  45. privatevoid   
  46. null null try   
  47. new);  
  48. newnew   
  49. new   
  50. whilenull   
  51. );  
  52. catch finally try   
  53. ifnull ifnull catch publicstaticvoidthrows   
  54. new);  
  55.   
  56. new }  

上面广度优先没啥问题,本人昨天凌晨3点多做的测试,15分钟左右的时间,这只小爬虫爬到了30W+的链接,能力还是蛮强大的么,顺便提一下,白天测试的时候会非常非常的慢,推荐各位测试君在晚上12点以后做测试。。。。。虽然不太人道。。。

 

下面是深度优先的代码,测试的时候每次都能造成死循环。。。好吧,我承认我没有人品。。。其实基本方法和广度优先没啥区别,我每个页面爬出来的链接只拿第一个去爬下一个页面,总共爬多少层我懒的木有定义,就是想看看最多能爬到哪。。。然后每次都能悲剧的死循环了。。。我明明也设置了跳出的方法了啊,我有判断有效链接的方式,但是我的判断并不完善么,跳出方法我写到了catch中,只要有一个无效链接,就可以跳出来了么。。。今天凌晨全都是死循环。。。。无奈了。。。。下面请代码君上场~~~~~~~~~~


 

[java]  view plain copy
 
  1. /** 
  2.  * 完成深度优先搜索 
  3.  * 爬虫进行深度优先很有可能会出现死循环的情况 
  4.  */ package import import import import import import import import import importimport import import /** 
  5.  * @author 魏诗尧 
  6.  * @version 1.8 
  7.  * @emali inwsy@hotmail.com 
  8.  */ publicclass   
  9. privatestaticnew   
  10. privatevoid   
  11. null   
  12. null   
  13. null try   
  14. new   
  15.   
  16.   
  17. new bytenewbyte1024 int;  
  18.   
  19. while)) != -) {  
  20. , len);  
  21. new);  
  22. catch );  
  23. finally try   
  24. ifnull ifnull catch   
  25. privatevoid   
  26. null null try   
  27. new);  
  28. newnew   
  29. whilenull   
  30.   
  31.   
  32. while );  
  33.   
  34. if) {  
  35. continue if) == ) {  
  36. continue if)) {  
  37. continue if) != -) {  
  38. continue if) != -) {  
  39. continue if)) {  
  40. continue   
  41.   
  42. whilenull new);  
  43. break catch );  
  44. new finally   
  45. try ifnull ifnull catch publicvoid null try   
  46. newtrue   
  47. while );  
  48. catch );  
  49. finally try ifnull catch publicstaticvoid new);  
  50. new }  

上面这两篇代码本身是十分不完善的,时间原因,我基本只实现了最基本的原理,能改动增加的地方还有很多,主要是增加,很多地方都可增加代码来增强程序的健壮性。。。比如有效链接判断的地方,我们从href标签中取出来的内容除了我写的几条判断意外还有好多东西都没有处理掉,这个地方还是能增加很多东西的。。。

 

没有整理与归纳的知识,一文不值!高度概括与梳理的知识,才是自己真正的知识与技能。 永远不要让自己的自由、好奇、充满创造力的想法被现实的框架所束缚,让创造力自由成长吧! 多花时间,关心他(她)人,正如别人所关心你的。理想的腾飞与实现,没有别人的支持与帮助,是万万不能的。






   本文转自wenglabs博客园博客,原文链接:http://www.cnblogs.com/arxive/p/6194372.html ,如需转载请自行联系原作者
相关文章
|
3天前
|
存储 负载均衡 Java
Java中的服务注册与发现原理与实现
Java中的服务注册与发现原理与实现
|
3天前
|
存储 监控 安全
深入理解Java虚拟机(JVM)原理
深入理解Java虚拟机(JVM)原理
|
6天前
|
算法 安全 Java
Java中MD5加密算法的原理与实现详解
Java中MD5加密算法的原理与实现详解
|
8天前
|
设计模式 算法 Java
简单了解下Java中锁的概念和原理
Java的锁通过java代码实现,go语言的锁通过go实现,python语言的锁通过python实现。它们都实现的什么呢?这部分就是锁的定义和设计模式、算法、原理等一些理论上的东西。
10 1
|
9天前
|
Java 编译器
Java健壮性 Java可移植性 JDK, JRE, JVM三者关系 Java的加载与执行原理 javac编译与JAVA_HOME环境变量介绍 Java中的注释与缩进 main方法的args参数
Java健壮性 Java可移植性 JDK, JRE, JVM三者关系 Java的加载与执行原理 javac编译与JAVA_HOME环境变量介绍 Java中的注释与缩进 main方法的args参数
10 1
|
10天前
|
存储 并行计算 算法
深入解析Java并发库(JUC)中的Phaser:原理、应用与源码分析
深入解析Java并发库(JUC)中的Phaser:原理、应用与源码分析
|
9天前
|
存储 安全 Java
深入剖析Java并发库:Exchanger的工作原理与应用场景
深入剖析Java并发库:Exchanger的工作原理与应用场景
|
9天前
|
存储 缓存 Java
深入剖析Java并发库(JUC)之StampedLock的应用与原理
深入剖析Java并发库(JUC)之StampedLock的应用与原理
深入剖析Java并发库(JUC)之StampedLock的应用与原理
|
2天前
|
存储 监控 安全
深入理解Java虚拟机(JVM)原理
深入理解Java虚拟机(JVM)原理
|
5天前
|
存储 Java 索引
Java List接口实现原理与性能评估
Java List接口实现原理与性能评估