前言:写这篇文章之前,主要是我看了几篇类似的爬虫写法,有的是用的队列来写,感觉不是很直观,还有的只有一个请求然后进行页面解析,根本就没有自动爬起来这也叫爬虫?因此我结合自己的思路写了一下简单的爬虫,测试用例就是自动抓取我的博客网站(http://www.zifangsky.cn)的所有链接。

一 算法简介

程序在思路上采用了广度优先算法,对未遍历过的链接逐次发起GET请求,然后对返回来的页面用正则表达式进行解析,取出其中未被发现的新链接,加入集合中,待下一次循环时遍历。

具体实现上使用了Map,键值对分别是链接和是否被遍历标志。程序中使用了两个Map集合,分别是:oldMap和newMap,初始的链接在oldMap中,然后对oldMap里面的标志为false的链接发起请求,解析页面,用正则取出标签下的链接,如果这个链接未在oldMap和newMap中,则说明这是一条新的链接,同时要是这条链接是我们需要获取的目标网站的链接的话,我们就将这条链接放入newMap中,一直解析下去,等这个页面解析完成,把oldMap中当前页面的那条链接的值设为true,表示已经遍历过了。最后是当整个oldMap未遍历过的链接都遍历结束后,如果发现newMap不为空,则说明这一次循环有新的链接产生,因此将这些新的链接加入oldMap中,继续递归遍历,反之则说明这次循环没有产生新的链接,继续循环下去已经不能产生新链接了,因为任务结束,返回链接集合oldMap

二 程序实现

上面相关思路已经说得很清楚了,并且代码中关键地方有注释,因此这里就不多说了,代码如下:

三 最后的测试效果

PS:其实用递归这种方式不是太好,因为要是网站页面比较多的话,程序运行时间长了对内存的消耗会非常大,不过因为我的博客网站页面不是很多,因此效果还可以。

==============仅供参考============

java爬虫怎么确定url连接_Java爬虫之抓取一个网站上的全部链接相关推荐

  1. Java爬虫实战(一):抓取一个网站上的全部链接

    前言:写这篇文章之前,主要是我看了几篇类似的爬虫写法,有的是用的队列来写,感觉不是很直观,还有的只有一个请求然后进行页面解析,根本就没有自动爬起来这也叫爬虫?因此我结合自己的思路写了一下简单的爬虫,测 ...

  2. java随机抓取网站上的图片_抓取一个网站特定的全部图片(JAVA)

    1. 目的 用五笔时,如果碰到不会拆的字,只好换回拼音.但这样做治标不治本,于是到网上找五笔反查工具.最后发现一个不错的网站--不仅有每个字对应的五笔码,还有其字根图.可惜的是,这是一个网站.换句说, ...

  3. java从网页抓取图片_抓取一个网站特定的全部图片(JAVA)

    1. 目的 用五笔时,如果碰到不会拆的字,只好换回拼音.但这样做治标不治本,于是到网上找五笔反查工具.最后发现一个不错的网站--不仅有每个字对应的五笔码,还有其字根图.可惜的是,这是一个网站.换句说, ...

  4. Python爬虫入门教程 22-100 CSDN学院课程数据抓取

    1. CSDN学院课程数据-写在前面 今天又要抓取一个网站了,选择恐惧症使得我不知道该拿谁下手,找来找去,算了,还是抓取CSDN学院吧,CSDN学院的网站为 https://edu.csdn.net/ ...

  5. python数据抓取课程_Python爬虫入门教程 22-100 CSDN学院课程数据抓取

    1. CSDN学院课程数据-写在前面 今天又要抓取一个网站了,选择恐惧症使得我不知道该拿谁下手,找来找去,算了,还是抓取CSDN学院吧,CSDN学院的网站为 https://edu.csdn.net/ ...

  6. python 代理ip验证_python爬虫成长之路(二):抓取代理IP并多线程验证

    上回说到,突破反爬虫限制的方法之一就是多用几个代理IP,但前提是我们得拥有有效的代理IP,下面我们来介绍抓取代理IP并多线程快速验证其有效性的过程. 一.抓取代理IP 提供免费代理IP的网站还挺多的, ...

  7. Crawler:反爬虫之基于urllib库+伪装浏览器方式实现从各种网站上(以百度贴吧为例)获得你喜欢的照片下载到本地电脑上

    Crawler:反爬虫之基于urllib库+伪装浏览器方式实现从各种网站上(以百度贴吧为例)获得你喜欢的照片下载到本地电脑上 目录 输出结果 实现代码 输出结果 后期更新-- 实现代码 import ...

  8. python爬虫网页中的图片_Python爬虫爬取一个网页上的图片地址实例代码

    本文实例主要是实现爬取一个网页上的图片地址,具体如下. 读取一个网页的源代码: import urllib.request def getHtml(url): html=urllib.request. ...

  9. 爬虫入门--爬取就业网站上的岗位信息构造数据集

    爬虫入门--爬取就业网站上的岗位信息.解析爬取的数据构造数据集 爬虫入门实践 爬虫的基本概念 爬虫的技术实现 爬虫入门实践 大家好!随着大数据分析逐渐火热的今天,爬虫技能也成了数据分析师一项不可或缺的 ...

最新文章

  1. NodeJS入门--环境搭建 IntelliJ IDEA
  2. BZOJ3998: [TJOI2015]弦论(后缀自动机,Parent树)
  3. grub shell 错误_GRUB启动故障排除和内核编译
  4. 缺少 mcrypt 扩展。请检查 PHP 配置。(phpmyadmin)
  5. 《IBM-PC汇编语言程序设计》(第2版)【沈美明 温冬婵】——第十章——自编解析与答案
  6. antd 进行ajax请求,react+dva+antd接口调用方式
  7. 留言送书丨《Oracle高性能系统实战大全》包邮到家
  8. Waymo在美国推出自动驾驶汽车共享服务
  9. python通过文件路径读取图片
  10. secoclient隧道保活超时或协商超时_绕不开的TCP之超时重传
  11. 合影效果java_排序入门练习题9 合影效果 题解
  12. Oracle 18c新特性-Memoptimized Rowstore(内存优化的行存储)
  13. Excel表格转为Latex图表
  14. VIL100数据集处理
  15. python下载mp3_Python 教你轻松下载网易音乐歌曲
  16. CPU占用过高问题排查
  17. [SLAM]高博视觉SLAM十四讲ch4中useSophus报错
  18. (翻译)Fully Automated Deep Learning System for Bone Age Assessment
  19. 阿德勒心理学(强者心理学)
  20. 【Excel】巧用数组——多项目跨越多个调整期的利息计算器

热门文章

  1. Nacos配置中心-加载多配置集
  2. 区域数据导入功能(POI使用方式)
  3. 权限基本操作:实体类和dao
  4. 局部变量-不同函数内的同名局部变量
  5. Spring Session源码解析
  6. 测试串行回收与堆初始值有关系02
  7. mysql 特殊字符支持_mysql 解决生僻字,特殊字符插入失败
  8. python继承问题_深入浅析python继承问题
  9. 中文问好_直击/泷泽秀明秘访台!Hey! Say! JUMP也来了 亲切秀中文问好
  10. LOJ#2353 货币兑换