从零开始打造一个新闻订阅APP之爬虫篇(一、背景介绍&需求分析)

这段时间,打算好好写写博客,希望将自己前段时间的开发经历梳理一遍,看看能不能沉淀一些东西,也希望能够和有共同兴趣的同学一起探讨学习。
有兴趣的同学可以看看前两篇文章:
“创业梦”的破碎
布板的前世今生
我开发的就是一个类似于Zaker和鲜果等新闻订阅服务的APP;接下来的一个系列,我都将是围绕这一个主题,按照一定的逻辑,介绍如何一步步地开发出一个新闻订阅APP。
首先,将会是第一部分:爬虫篇。
爬虫是我工作量最少,但是代码写的最有意思的一部分。
好了,言归正传,学习爬虫,不得不先提到通用搜索引擎的爬虫是如何工作的,先来看一张图:
从零开始打造一个新闻订阅APP之爬虫篇(一、背景介绍&需求分析)_第1张图片
注:nutch原理图
这大概是网上流传最广的一张关于爬虫的介绍图,左半部分即是爬虫的工作流程了。
它的工作步骤简单的概括大致分为以下几步:

  1. 指定需要搜索的页面集的url正则表达式;
  2. 注入urls种子,(通常是root url),并更新到待抓取集合中;
  3. 抓取当前待抓取集合中的urls所对应的页面;
  4. 解析抓取到的页面,包括: 提取超链接,去重,合并到待抓取集合中;
  5. 重复3,4两个步骤。直到集合为空或指定的抓取深度结束;

通用搜索引擎能不能用于特定的爬虫呢?我的理解是肯定能,但是用已有的开源爬虫去解决自己的需求有以下两方面的问题:
1、“杀鸡焉用牛刀”,通用的爬虫搜索面临的问题是如何抓取一个体量巨大的信息网,解析各种各样不同的web文档结构,而我只是需要去抓取一类特定的站点;
2、“牛刀”用来“杀鸡”,必须要对它进行改造,但改造这把牛刀的成本太高。必须要对这把“刀”有非常深刻的理解,深入掌握它的工作原理,这样当爬虫遇到问题时,才能快速的通过修改内部代码去满足“杀鸡”的每一个细节,而理解它的过程耗费的时间和成本远远大于自己重新写一个简单,特定的爬虫系统;

基于上述两点考虑,我决定自己写一个简易的爬虫系统来满足自己抓取的需求。那么问题来了,
一、你要抓取哪些信息?以什么样的方式去存储和展现?
答:最初的想法就是抓取自己经常看的一些媒体,资讯类站点,先满足自己的需求。通过分析类似于“创业邦”、“36氪”、“Pingwest”等站点,可以发现它们的特点都是一样的:列表页面+正文信息。同样,抓取到移动端对应的也是一个个的站点-》信息列表-》正文内容;
二、目前系统主要解决的问题和瓶颈有哪些?
答: 1. 快速接入并稳定抓取当前业务需要的来源网站的news信息; 如何保证能够适应各种 html结构的页面解析;(合理的抽象+具体实现);
2. 系统对单个站点的信息更新只需要最新的一部分内容; 不要对网站在短时间内产生大量抓取请求,容易被目标站点屏蔽;
3. 系统稳定性保障代码的鲁棒性;爬虫可能面对的问题:解析失败, http返回各种的各种状态码处理 ,其它异常处理;
4. 监控各个crawler的实时状态信息,对异常的信息进行人工处理;
5. 在初期只能用一台机器简单,快速地完成所有的爬虫工作

下一篇,我会详细介绍如何实现这样一个简单但满足当前需求的爬虫;

你可能感兴趣的:(新闻订阅APP实现)