博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java爬虫搜索原理实现
阅读量:5064 次
发布时间:2019-06-12

本文共 2119 字,大约阅读时间需要 7 分钟。

原文

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

1.广度优先

 

[java] 
 
  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] 
 
  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标签中取出来的内容除了我写的几条判断意外还有好多东西都没有处理掉,这个地方还是能增加很多东西的。。。

 

转载于:https://www.cnblogs.com/arxive/p/6194372.html

你可能感兴趣的文章
SQLite数据库简介
查看>>
利用堆实现堆排序&优先队列
查看>>
Mono源码学习笔记:Console类(四)
查看>>
Android学习路线(十二)Activity生命周期——启动一个Activity
查看>>
《Genesis-3D开源游戏引擎完整实例教程-跑酷游戏篇03:暂停游戏》
查看>>
CPU,寄存器,一缓二缓.... RAM ROM 外部存储器等简介
查看>>
windows下编译FreeSwitch
查看>>
git .gitignore 文件不起作用
查看>>
Alan Turing的纪录片观后感
查看>>
c#自定义控件中的事件处理
查看>>
App.config自定义节点读取
查看>>
unity3d根据手机串号和二维码做正版验证
查看>>
二十六、Android WebView缓存
查看>>
django Models 常用的字段和参数
查看>>
linux -- 嵌入式linux下wifi无线网卡驱动
查看>>
SVN使用教程总结
查看>>
SQL中varchar和nvarchar有什么区别?
查看>>
OpenCV矩阵运算总结
查看>>
Java Build Practice 4:Extend and Invoke Ant API
查看>>
[转] Transformer图解
查看>>