数据处理器
通俗的爬虫法度榜样中是把 网页解析器 和 数据处理器 合在一路的,解析到数据后立时处理。 在一个标准化的爬虫法度榜样中,他们应当是各司其职的,我们先经由过程解析器将须要的数据解析出来,可能是封装查对象。 然后传递给数据处理器,处理器接收到数据后可能是存储到数据库,也可能经由过程接口发送给老王。
根本特点
膳绫擎说了这么多,我们设计的爬虫框架有以下几个特点,没有做到大年夜而全,可以称得上轻量迷你挺好用。
- 易于定制: 很多站点的下载频率、浏览器请求是不合的,爬虫框架须要供给此处扩大设备
- 多线程下载: 当CPU核数多的时刻多线程下载可以更快完成义务
- 支撑 XPath 和 CSS 选择器解析
架构图
全部流程和 Scrapy 是一致的,但简化了一些操作
- 引擎(Engine): 用来处理全部体系的数据流处理, 触发事务(框架核心)
- 调剂器(Scheduler): 用来接收引擎发过来的请求, 压入队列中, 并在引擎再次请求的时刻返回. 可以想像成一个URL(抓取网页的网址或者说是链接)的优先队列, 由它来决定下一?要抓取的网址是什么, 同时去除反复的网址
- 下载器(Downloader): 用于下载网页内容, 并将网页内容返回给调剂器
- 爬虫(Spiders): 爬虫是重要干活的, 用于大年夜特定的网页中提取本身须要的信息, 即所谓的实体(Item)。 用户也可以大年夜中提掏出链接,让框架持续抓取下一?页面
- 项目管道(Pipeline): 负粜ウ理爬虫大年夜网页中采取的实体,重要的功能是持久化实体、验证实体的有效性、清除不须要的信息。 当页面被爬虫解析后,将被发送到项目管道,并经由几个特定的次序处理数据。
履行流程图
- 起首,引擎大年夜调剂器中掏出一个链接(URL)用于接下来的抓取
- 引擎把URL封装成一个请求(Request)传给下载器,下载器把资本下载下来,并封装成应答包(Response)
- 然后,爬虫解析Response
- 若是解析出实体(Item),则交给实体管道进行进一步的处理。
- 若是解析出的昵啻接(URL),则把URL交给Scheduler等待抓取
项目构造
该项目应用 Maven3、Java8 进行构建,代码构造如下:
收集爬虫会碰到的问题
- .
- └── elves
- ├── Elves.java
- ├── ElvesEngine.java
- ├── config
- ├── download
- ├── event
- ├── pipeline
- ├── request
- ├── response
- ├── scheduler
- ├── spider
- └── utils
前面设计思路明白之后,编程不过是顺手之作,至于写的若何考量的是法度榜样员对编程说话的应用闇练度以及架构上的思虑, 优良的代码是经验和优化而来的,下面我们来看几个框架中的代码示例。
应用不雅察者模式的思惟来实现基于事宜驱动的功能
- public enum ElvesEvent {
- GLOBAL_STARTED,
- SPIDER_STARTED
- }
- public class EventManager {
- private static final Map<ElvesEvent, List<Consumer<Config>>> elvesEventConsumerMap = new HashMap<>();
- // 注册事宜
- public static void registerEvent(ElvesEvent elvesEvent, Consumer<Config> consumer) {
- List<Consumer<Config>> consumers = elvesEventConsumerMap.get(elvesEvent);
- if (
推荐阅读
年前最后一场技巧盛宴 | 1月27日与京东、日记易技巧大年夜咖畅聊智能化运维成长趋势!PC主机重要的散热方法分为风冷和水冷,然则信赖不少玩家据说过“油冷”,就是应用矿物油不导电的特点,将>>>详细阅读
本文标题:设计和实现一款轻量级的爬虫框架
地址:http://www.17bianji.com/lsqh/40337.html
1/2 1