这次都是一些纯语言的表达,可能会有点啰嗦,或者有点枯燥,也是对爬虫的一些小小的见解,可能只是一些常见话,哈哈,还是耐心的写完。
网络爬虫的整体执行流程:
1)确定一个(多个)种子网页
2)进行数据内容的提取
3)将网页中的关联网页链接进行提取出来
4)将尚未爬去的关联网页内容放入到一个队列中
5)从队列中取出一个待爬去的页面,判断之前是否爬过
6)把没有爬过的内容进行爬取,并进行之前的重复操作
7)直到队列中没有新的内容,爬虫执行结束
跳 动
舞 蹈
这样进行爬虫时,一般会有一些概念必须知道的:
广度优先遍历:指网络爬虫会先抓取起始网页中链接的所有网页,然后选择其中的一种链接网页,继续抓取在此网页中的链接的所有网页。这个方法最常用,也可以进行网络爬虫并行处理,提高爬去数据效率。
广度优先遍历就是像金字塔一样,首先抓取第一层数据,作为种子节点,然后遍历第二层数据,接着遍历第三层数据,等等以此类推
从一个已知的种子链接开始宽度的遍历网页,为了知道哪些网页可以进行抓取,需要将新发现的网页存储到一个URL队列中,使用ArrayDeque实现一个队列,为了避免重复访问一个网址,需要将遍历过的网页URL存入到历史表中,使用HashSet实现这个历史表。如果使用Queue来实现ToDo,则对每一个增加到ToDo的元素都需要进行对象封装,因为ArrayQueue底层采用数组实现,所以增加到ArrayQueue的元素不需要对象封装,ArrayDeque性能比Queue更好,所以todo采用ArrayDeque实现。
在爬虫需要注意的一些事项:
1:分任务分包时,有可能出现线程安全问题
2:数据重复问题
3:频率控制问题(尽量不要过快,有可能被发爬虫干掉)
4:对象的创建和销毁问题
5:没有考虑到的所有问题
如感觉不错点击“好看”