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. new bytenewbyte1024 int;
  14. while, )) != -) {
  15. , len);
  16. new);
  17. catch );
  18. finally try
  19. ifnull ifnull catch
  20. privatevoid
  21. null null null try
  22. newtrue new);
  23. newnew
  24. whilenull
  25. while );
  26. if) {
  27. continue if) == ) {
  28. continue if)) {
  29. continue if) != -) {
  30. continue if) != -) {
  31. continue if)) {
  32. continue
  33. );
  34. catch );
  35. finally
  36. try ifnull ifnull ifnull catch
  37. privatevoid
  38. null null try
  39. new);
  40. newnew
  41. new
  42. whilenull
  43. );
  44. catch finally try
  45. ifnull ifnull catch publicstaticvoidthrows
  46. new, );
  47. new }

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

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

[java] view
plain
copy

 
  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. new

    bytenewbyte1024

    int;

  16. while, )) != -) {
  17. , len);
  18. new);
  19. catch
    );
  20. finally
    try
  21. ifnull

    ifnull

    catch

  22. privatevoid
  23. null

    null

    try

  24. new);
  25. newnew
  26. whilenull
  27. while
    );
  28. if) {
  29. continue

    if) == ) {

  30. continue

    if)) {

  31. continue

    if) != -) {

  32. continue

    if) != -) {

  33. continue

    if)) {

  34. continue
  35. whilenull

    new);

  36. break

    catch
    );

  37. new
    finally
  38. try

    ifnull

    ifnull

    catch

    publicvoid

    null

    try

  39. new, true
  40. while

    );

  41. catch
    );
  42. finally

    try
    ifnull

    catch

    publicstaticvoid
    new, );

  43. new

    }

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

Java爬虫搜索原理实现的更多相关文章

  1. 开源磁力搜索爬虫dhtspider原理解析

    开源地址:https://github.com/callmelanmao/dhtspider. 开源的dht爬虫已经有很多了,有php版本的,python版本的和nodejs版本.经过一些测试,发现还 ...

  2. Google 以图搜图 - 相似图片搜索原理 - Java实现

    前阵子在阮一峰的博客上看到了这篇<相似图片搜索原理>博客,就有一种冲动要将这些原理实现出来了. Google "相似图片搜索":你可以用一张图片,搜索互联网上所有与它相 ...

  3. Google 以图搜图 - 相似图片搜索原理 - Java实现 (转)

    前阵子在阮一峰的博客上看到了这篇<相似图片搜索原理>博客,就有一种冲动要将这些原理实现出来了. Google "相似图片搜索":你可以用一张图片,搜索互联网上所有与它相 ...

  4. webmagic的设计机制及原理-如何开发一个Java爬虫

    之前就有网友在博客里留言,觉得webmagic的实现比较有意思,想要借此研究一下爬虫.最近终于集中精力,花了三天时间,终于写完了这篇文章.之前垂直爬虫写了一年多,webmagic框架写了一个多月,这方 ...

  5. webmagic的设计机制及原理-如何开发一个Java爬虫 转

    此文章是webmagic 0.1.0版的设计手册,后续版本的入门及用户手册请看这里:https://github.com/code4craft/webmagic/blob/master/user-ma ...

  6. 不会python?那就换一种姿势爬虫!Java爬虫技术总结

    -本博客为原创内容,转载需注明本人- 前几天有个师妹将要毕业,需要准备毕业论文,但是论文调研需要数据资料,上知网一查,十几万条数据!指导老师让她手动copy收集,十几万的数据手动copy要浪费多少时间 ...

  7. 深入Java核心 Java内存分配原理精讲

    深入Java核心 Java内存分配原理精讲 栈.堆.常量池虽同属Java内存分配时操作的区域,但其适用范围和功用却大不相同.本文将深入Java核心,详细讲解Java内存分配方面的知识. Java内存分 ...

  8. JAVA爬虫 WebCollector

    JAVA爬虫 WebCollector 爬虫简介: WebCollector是一个无须配置.便于二次开发的JAVA爬虫框架(内核),它提供精简的的API,只需少量代码即可实现一个功能强大的爬虫. 爬虫 ...

  9. Java爬虫爬取网站电影下载链接

    之前有看过一段时间爬虫,了解了爬虫的原理,以及一些实现的方法,本项目完成于半年前,一直放在那里,现在和大家分享出来. 网络爬虫简单的原理就是把程序想象成为一个小虫子,一旦进去了一个大门,这个小虫子就像 ...

随机推荐

  1. 《Java程序设计》第二次实验报告

    20145220 <Java程序设计>第二次实验报告 课程:Java程序设计 指导教师:娄嘉鹏 实验日期:2016.04.12 实验名称:Java面向对象程序设计 实验内容 初步掌握单元测 ...

  2. JAVA导入包

    在package **;下面写入 import java.**.**; 1.使用Scanner工具类来获取用户输入的成绩信息 Scanner类位于java.util包中,使用时需要导入此包 1.1. ...

  3. Awesome Reinforcement Learning

    Awesome Reinforcement Learning A curated list of resources dedicated to reinforcement learning. We h ...

  4. DDD, MVC & Entity Framework

    https://digitalpolis.co.uk/software-thoughts/ddd-mvc-entity-framework/ Data Points - Coding for Doma ...

  5. Nginx-server_name匹配规则

    server_name可为IP/domain/localhost/null等任何字符串(字符串server_name也可以用来匹配),注意各个 server 块的顺序. 1.如果只有一个server, ...

  6. 如何将SQL Server 2008库导入2000中

    v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VM ...

  7. 无法启动:此实现不是Windows平台FIPS验证的加密算法的一部分

    个别同学可能会在启动订票助手.NET的时候发现这个提示: 出现这个问题的原因是订票助手.NET使用了MD5算法,而系统的组策略安全设置导致无法使用此算法.要修正此问题,请按照如下操作(两种方法任选其一 ...

  8. python数据类型之int用法

    1.查看整型的用法 CODE:print(dir(int))['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', ...

  9. mongodb 最佳实践

    MongoDB功能预览:http://pan.baidu.com/s/1k2UfW MongoDB在赶集网的应用:http://pan.baidu.com/s/1bngxgLp MongoDB在京东的 ...

  10. Javascript 去掉字符串前后空格的五种方法

    第一种:循环检查替换 [javascript] //供使用者调用 function trim(s){ return trimRight(trimLeft(s)); } //去掉左边的空白 functi ...