java广度优先爬虫示例,【爬虫】广度优先遍历抓取数据概述

113db61438a6583541bd28e0cbea4661.png

这次都是一些纯语言的表达,可能会有点啰嗦,或者有点枯燥,也是对爬虫的一些小小的见解,可能只是一些常见话,哈哈,还是耐心的写完。

网络爬虫的整体执行流程:

1)确定一个(多个)种子网页

2)进行数据内容的提取

3)将网页中的关联网页链接进行提取出来

4)将尚未爬去的关联网页内容放入到一个队列中

5)从队列中取出一个待爬去的页面,判断之前是否爬过

6)把没有爬过的内容进行爬取,并进行之前的重复操作

7)直到队列中没有新的内容,爬虫执行结束

跳 动

235fc3c5a435fab700d191a410bb9638.png

436bc12c00b9773c41d5ae0ab6bf381a.png

舞 蹈

这样进行爬虫时,一般会有一些概念必须知道的:

广度优先遍历:指网络爬虫会先抓取起始网页中链接的所有网页,然后选择其中的一种链接网页,继续抓取在此网页中的链接的所有网页。这个方法最常用,也可以进行网络爬虫并行处理,提高爬去数据效率。

广度优先遍历就是像金字塔一样,首先抓取第一层数据,作为种子节点,然后遍历第二层数据,接着遍历第三层数据,等等以此类推

从一个已知的种子链接开始宽度的遍历网页,为了知道哪些网页可以进行抓取,需要将新发现的网页存储到一个URL队列中,使用ArrayDeque实现一个队列,为了避免重复访问一个网址,需要将遍历过的网页URL存入到历史表中,使用HashSet实现这个历史表。如果使用Queue来实现ToDo,则对每一个增加到ToDo的元素都需要进行对象封装,因为ArrayQueue底层采用数组实现,所以增加到ArrayQueue的元素不需要对象封装,ArrayDeque性能比Queue更好,所以todo采用ArrayDeque实现。

在爬虫需要注意的一些事项:

1:分任务分包时,有可能出现线程安全问题

2:数据重复问题

3:频率控制问题(尽量不要过快,有可能被发爬虫干掉)

4:对象的创建和销毁问题

5:没有考虑到的所有问题

如感觉不错点击“好看”

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值