Java 动手写爬虫: 五 对象池

第五篇,对象池的设计与实现

前面每爬取一个任务都对应一个Job任务,试想一下,当我们爬取网页越来越多,速度越来越快时,就会出现频繁的Job对象的创建和销毁,因此本片将考虑如何实现对象的复用,减少频繁的gc

设计

我们的目标是设计一个对象池,用于创建Job任务,基本要求是满足下面几点:

  • 可以配置对象池的容量大小
  • 通过对象池获取对象时,遵循一下规则:
    • 对象池中有对象时,总对象池中获取
    • 对象池中没有可用对象时,新创建对象返回(也可以采用阻塞,直到有可用对象,我们这里采用直接创建新对象方式)
  • 对象用完后扔回对象池

Java 动手写爬虫: 四、日志埋点输出 & 动态配置支持

第四篇, 日志埋点输出 & 动态配置支持

前面基本上实现了一个非常简陋的爬虫框架模型,很多关键链路都没有日志,在分析问题时,就比较麻烦了,因此就有了这一篇博文

其次就是解决前几篇遗留的容易解决的问题

实际上,日志的输出应该贯穿在实际的开发过程中的,由于之前写得比较随意,直接System.out了, 所以现在就来填坑了

Java 动手写爬虫: 三、爬取队列

第三篇 爬取队列的实现

第二篇中,实现了深度爬取的过程,但其中一个比较明显的问题就是没有实现每个爬取作为一个独立的任务来执行;即串行的爬取网页中的链接;因此,这一篇将主要集中目标在并发的爬网页的问题上

目标是每个链接的爬取都当做一个独立的job来执行

Java 动手写爬虫: 二、 深度爬取

第二篇:深度爬取

前面实现了一个最基础的爬取单网页的爬虫,这一篇则着手解决深度爬取的问题

简单来讲,就是爬了一个网页之后,继续爬这个网页中的链接

Java 动手写爬虫: 一、实现一个最简单爬虫

第一篇实现一个最简单爬虫

准备写个爬虫, 可以怎么搞?

I. 使用场景

先定义一个最简单的使用场景,给你一个url,把这个url中指定的内容爬下来,然后停止

  • 一个待爬去的网址(有个地方指定爬的网址)
  • 如何获取指定的内容(可以配置规则来获取指定的内容)
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×