Java爬虫搜索原理实现
2023-09-14 09:02:23 时间
没事做,又研究了一下爬虫搜索,两三天时间总算是把原理闹的差不多了,基本实现了爬虫搜索的原理,本次实现还是俩程序,分别是按广度优先和深度优先完成的,广度优先没啥问题,深度优先请慎用,有极大的概率会造成死循环情况,下面深度优先的测试网站就造成了死循环。。。。好吧,我承认是我人品不太好。。。下面有请代码君出场~~~~~~~~~~~~~~~
1.广度优先
- /**
- * 完成广度优先搜索
- */ package import import import import import import import import import import import /**
- * @author 魏诗尧
- * @version 1.8
- * @emali inwsy@hotmail.com
- */ publicclass
- privatevoid
- null
- null
- null try
- new
- new bytenewbyte1024 int;
- while, )) != -) {
- , len);
- new);
- catch );
- finally try
- ifnull ifnull catch
- privatevoid
- null null null try
- newtrue new);
- newnew
- whilenull
- while );
- if) {
- continue if) == ) {
- continue if)) {
- continue if) != -) {
- continue if) != -) {
- continue if)) {
- continue
- );
- catch );
- finally
- try ifnull ifnull ifnull catch
- privatevoid
- null null try
- new);
- newnew
- new
- whilenull
- );
- catch finally try
- ifnull ifnull catch publicstaticvoidthrows
- new, );
- new }
上面广度优先没啥问题,本人昨天凌晨3点多做的测试,15分钟左右的时间,这只小爬虫爬到了30W+的链接,能力还是蛮强大的么,顺便提一下,白天测试的时候会非常非常的慢,推荐各位测试君在晚上12点以后做测试。。。。。虽然不太人道。。。
下面是深度优先的代码,测试的时候每次都能造成死循环。。。好吧,我承认我没有人品。。。其实基本方法和广度优先没啥区别,我每个页面爬出来的链接只拿第一个去爬下一个页面,总共爬多少层我懒的木有定义,就是想看看最多能爬到哪。。。然后每次都能悲剧的死循环了。。。我明明也设置了跳出的方法了啊,我有判断有效链接的方式,但是我的判断并不完善么,跳出方法我写到了catch中,只要有一个无效链接,就可以跳出来了么。。。今天凌晨全都是死循环。。。。无奈了。。。。下面请代码君上场~~~~~~~~~~
- /**
- * 完成深度优先搜索
- * 爬虫进行深度优先很有可能会出现死循环的情况
- */ package import import import import import import import import import import import import import /**
- * @author 魏诗尧
- * @version 1.8
- * @emali inwsy@hotmail.com
- */ publicclass
- privatestaticnew
- privatevoid
- null
- null
- null try
- new
- new bytenewbyte1024 int;
- while, )) != -) {
- , len);
- new);
- catch );
- finally try
- ifnull ifnull catch
- privatevoid
- null null try
- new);
- newnew
- whilenull
- while );
- if) {
- continue if) == ) {
- continue if)) {
- continue if) != -) {
- continue if) != -) {
- continue if)) {
- continue
- whilenull new);
- break catch );
- new finally
- try ifnull ifnull catch publicvoid null try
- new, true
- while );
- catch );
- finally try ifnull catch publicstaticvoid new, );
- new }
上面这两篇代码本身是十分不完善的,时间原因,我基本只实现了最基本的原理,能改动增加的地方还有很多,主要是增加,很多地方都可增加代码来增强程序的健壮性。。。比如有效链接判断的地方,我们从href标签中取出来的内容除了我写的几条判断意外还有好多东西都没有处理掉,这个地方还是能增加很多东西的。。。
相关文章
- java局域网发送文件_Java如何实现局域网文件传输代码案例分享
- Java多线程常用面试题
- java从入门到精通_Java 入门到精通的过程
- 简单的java图片存储方法
- 手机版java编译器_Java编译器[通俗易懂]
- 【说站】java注解有哪些作用
- 阿里逆天级调优方案,内部这套Java性能调优实战宝典,堪称教科书
- ringbuffer java例子_Java RingBuffer.publish方法代碼示例「建议收藏」
- Java中&和&&的区别
- 并发多线程学习(五)Java线程的状态及主要转化方法
- 大数据必学Java基础(九十七):事务及回滚点
- Java官方笔记1编写运行Java程序
- 作为一个Java程序员如何对接外部接口?
- oracle runInstaler 报错 Exception in thread “main” java.lang.NoClassDefFoundError
- mongodb索引知识_动力节点Java学院整理
- Java基础学习笔记十二 类、抽象类、接口作为方法参数和返回值以及常用API详解编程语言
- Java学习笔记之五java数组详解编程语言
- java设计模式之工厂模式详解编程语言
- Oracle 视图 USER_JAVA_THROWS 官方解释,作用,如何使用详细说明
- java判断字符串编码详解编程语言
- Java编程中的Redis过期策略(redisjava过期)
- 『Redis Java:超时实现原理及应用』(redisjava过期)
- 设置Redis实现Java中过期设置的技术实现(redisjava过期)
- 使用Java监听MySQL数据库变化(java监听mysql)
- java基本教程之join方法详解java多线程教程
- java教程之对象序列化使用基础示例详解