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

时间: 2024-10-11 17:33:41

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

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

前阵子在阮一峰的博客上看到了这篇<相似图片搜索原理>博客,就有一种冲动要将这些原理实现出来了. Google "相似图片搜索":你可以用一张图片,搜索互联网上所有与它相似的图片. 打开Google图片搜索页面: 点击使用上传一张angelababy原图: 点击搜索后,Google将会找出与之相似的图片,图片相似度越高就越排在前面.如: 这种技术的原理是什么?计算机怎么知道两张图片相似呢? 根据Neal Krawetz博士的解释,实现相似图片搜素的关键技术叫做"感知

Java爬虫爬取 天猫 淘宝 京东 搜索页和 商品详情

Java爬虫爬取 天猫 淘宝 京东 搜索页和 商品详情 先识别商品url,区分平台提取商品编号,再根据平台带着商品编号爬取数据. 1.导包 <!-- 爬虫相关Jar包依赖 --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.10-FINAL</version> </

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

此文章是webmagic 0.1.0版的设计手册,后续版本的入门及用户手册请看这里:https://github.com/code4craft/webmagic/blob/master/user-manual.md 之前就有网友在博客里留言,觉得webmagic的实现比较有意思,想要借此研究一下爬虫.最近终于集中精力,花了三天时间,终于写完了这篇文章.之前垂直爬虫写了一年多,webmagic框架写了一个多月,这方面倒是有一些心得,希望对读者有帮助. webmagic的目标 一般来说,一个爬虫包括

相似图片搜索原理二(phash—c++实现)

前段时间介绍过相似图片搜索原理一(ahash) http://blog.csdn.net/lu597203933/article/details/45101859,它是基于内容检索最简单的一种:这里介绍它的增强版本感知哈希算法(perceptual hash, phash).它主要也是用缩略图搜原图并能达到较好点的效果. 理论部分: 理论部分主要包括以下几个步骤: <1> 图像缩放-将图像缩放到32*32大小 <2>灰度化-对32*32大小的图像进行灰度化 <3>离散余

Java爬虫实战(二):抓取一个视频网站上2015年所有电影的下载链接

前言:这是Java爬虫实战的第二篇文章,在第一篇文章仅仅只是抓取目标网站的链接的基础上,进一步提高难度,抓取目标页面上我们所需要的内容并保存在数据库中.这里的测试案例选用了一个我常用的电影下载网站(http://www.80s.la/).本来是想抓取网站上的所有电影的下载链接,后来感觉需要的时间太长,因此改成了抓取2015年电影的下载链接. 注:文末有我抓取到的整个列表的下载链接(包括:电影名称和迅雷下载链接) 一 原理简介 其实原理都跟第一篇文章差不多,不同的是鉴于这个网站的分类列表实在太多,

关于Java爬虫的研究

起因 最近突然发了羊癫疯,对爬虫十分感兴趣,开始想写几个爬虫练练手,于是,洗手开搞. 像我这种懒人,对爬虫了解个大概之后就开始偷懒了,开始找框架了,Google关键字“Java 爬虫”,第一个搜索结果就是 高票回答推荐的几款爬虫框架:nutch.Heritrix.crawler4j.WebCollector和WebMagic,果断选择了WebMagic,支持国人作品嘛(肯定是中文文档啊) 下手 使用Maven添加框架到项目中,在poxm.xml文件中添加以下依赖.国内的Maven库居然没有Web

weblogic与Java类加载器原理试验解析

通过试验,得出一个结论,假设在Weblogic的Server/lib下有一个类,与应用的Webapp/WEB-INF/classes 下的类名相同,方法名也相同,仅有在后台打印出来的字符的稍许差别,那在Weblogic启动后,无论个文 件夹中的类谁是新编译的(版本新或旧),应用系统均默认是使用server/lib下的类, 而不是引用Webapp/WEB-INF/classes下的类. 一.通过翻阅大量的资料了解到,java类加载的原理如下 JVM在运行时会产生三个ClassLoader: Boo

java 爬虫在 netbeans 里运行和单独运行结果不一样

在做内容测试的时候,发现我的爬虫(前些文章略有提及)在 netbeans 里面能够成功爬取网页内容,而单独运行时,给定一个 url,爬到的网页却与在浏览器里面打开 url 的网页完全不一样,这是一个很诡异的问题.我在相应位置增加代码,把网页写入某一个文件.结果发现,在 netbeans 里运行和单独运行两次写的文件的编码不一样,一个是 GBK 的编码,一个是 UTF-8  的编码,(我希望爬虫以 UTF-8 的方式运行,考虑到程序里面的字符串和数据库里面的字符串对应,都应该使用 UTF-8 编码

Java爬虫框架调研

Python中大的爬虫框架有scrapy(风格类似django),pyspider(国产python爬虫框架). 除了Python,Java中也有许多爬虫框架. nutch apache下的开源爬虫程序,功能丰富,文档完整.有数据抓取解析以及存储的模块 heritrix 比较成熟 地址:internetarchive/heritrix3 · GitHub很早就有了,经历过很多次更新,使用的人比较多,功能齐全,文档完整,网上的资料也多.有自己的web管理控制台,包含了一个HTTP 服务器.操作者可