首页 > 代码库 > Java爬虫搜索原理实现

Java爬虫搜索原理实现

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

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

1.广度优先

 

[java] view plaincopy
 
  1. /** 
  2.  * 完成广度优先搜索 
  3.  */ package import import import import import import import import import import import /** 
  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 plaincopy
 
  1. /** 
  2.  * 完成深度优先搜索 
  3.  * 爬虫进行深度优先很有可能会出现死循环的情况 
  4.  */ package import import import import import import import import import import import 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标签中取出来的内容除了我写的几条判断意外还有好多东西都没有处理掉,这个地方还是能增加很多东西的。。。

 

Java爬虫搜索原理实现