Java爬虫搜索原理实现

时间:2023-03-08 23:38:58
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. 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标签中取出来的内容除了我写的几条判断意外还有好多东西都没有处理掉,这个地方还是能增加很多东西的。。。