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 ,如需转载请自行联系原作者
相关文章
|
4月前
|
数据采集 JSON Java
Java爬虫获取1688店铺所有商品接口数据实战指南
本文介绍如何使用Java爬虫技术高效获取1688店铺商品信息,涵盖环境搭建、API调用、签名生成及数据抓取全流程,并附完整代码示例,助力市场分析与选品决策。
|
4月前
|
数据采集 存储 前端开发
Java爬虫性能优化:多线程抓取JSP动态数据实践
Java爬虫性能优化:多线程抓取JSP动态数据实践
|
6月前
|
存储 缓存 Java
我们来详细讲一讲 Java NIO 底层原理
我是小假 期待与你的下一次相遇 ~
211 2
|
5月前
|
监控 Java API
现代 Java IO 高性能实践从原理到落地的高效实现路径与实战指南
本文深入解析现代Java高性能IO实践,涵盖异步非阻塞IO、操作系统优化、大文件处理、响应式网络编程与数据库访问,结合Netty、Reactor等技术落地高并发应用,助力构建高效可扩展的IO系统。
151 0
|
3月前
|
数据采集 存储 弹性计算
高并发Java爬虫的瓶颈分析与动态线程优化方案
高并发Java爬虫的瓶颈分析与动态线程优化方案
|
7月前
|
存储 缓存 Java
【高薪程序员必看】万字长文拆解Java并发编程!(5):深入理解JMM:Java内存模型的三大特性与volatile底层原理
JMM,Java Memory Model,Java内存模型,定义了主内存,工作内存,确保Java在不同平台上的正确运行主内存Main Memory:所有线程共享的内存区域,所有的变量都存储在主存中工作内存Working Memory:每个线程拥有自己的工作内存,用于保存变量的副本.线程执行过程中先将主内存中的变量读到工作内存中,对变量进行操作之后再将变量写入主内存,jvm概念说明主内存所有线程共享的内存区域,存储原始变量(堆内存中的对象实例和静态变量)工作内存。
236 0
|
6月前
|
存储 算法 安全
Java中的对称加密算法的原理与实现
本文详细解析了Java中三种常用对称加密算法(AES、DES、3DES)的实现原理及应用。对称加密使用相同密钥进行加解密,适合数据安全传输与存储。AES作为现代标准,支持128/192/256位密钥,安全性高;DES采用56位密钥,现已不够安全;3DES通过三重加密增强安全性,但性能较低。文章提供了各算法的具体Java代码示例,便于快速上手实现加密解密操作,帮助用户根据需求选择合适的加密方案保护数据安全。
417 58
|
5月前
|
人工智能 安全 Java
Go与Java泛型原理简介
本文介绍了Go与Java泛型的实现原理。Go通过单态化为不同类型生成函数副本,提升运行效率;而Java则采用类型擦除,将泛型转为Object类型处理,保持兼容性但牺牲部分类型安全。两种机制各有优劣,适用于不同场景。
173 24
|
6月前
|
XML JSON Java
Java 反射:从原理到实战的全面解析与应用指南
本文深度解析Java反射机制,从原理到实战应用全覆盖。首先讲解反射的概念与核心原理,包括类加载过程和`Class`对象的作用;接着详细分析反射的核心API用法,如`Class`、`Constructor`、`Method`和`Field`的操作方法;最后通过动态代理和注解驱动配置解析等实战场景,帮助读者掌握反射技术的实际应用。内容翔实,适合希望深入理解Java反射机制的开发者。
555 13