Skip to content

Latest commit

 

History

History
65 lines (33 loc) · 3.88 KB

TUTORIAL.md

File metadata and controls

65 lines (33 loc) · 3.88 KB

Elise 使用文档

欢迎使用Elise!

本文档的目标是帮助你快速的使用它执行第一次爬取。

在此之前你可能需要稍微理解一下Elise对于数据爬取目标的建模思想。

建模思想

要把大象装冰箱,总共分两步!冰箱门就不用你关啦~

对于目标的寻路策略(Target and Help)

对于定向的数据爬取,我们采用的是路径描述的模式:

其中有两个关键的类型,分别为目标节点(target)和辅助节点(helpUrl)。

一个网站多个页面的互相单向连接组成了一个复杂的有向图模型。为了能够尽可能简单的成功从其中抽取到我们想要的数据。

以此,通过目标节点和辅助节点两个元素,我们将复杂的过程以以下步骤精简的展示框架内部如何获取到最终的数据:

实际上内部还包含了很多的优化处理,当然这些就不用使用者操心啦,放心地交给框架来搞定吧。

  1. 添加入口,并通过入口获取到响应。

  2. 判断响应体是否是目标节点,如果是进入第三步,否则进入第四步

  3. 从响应体中进行内容匹配提取,如果能够成功的抓取到内容,则进行持久化,之后进入第四步

  4. 提取其中的能够被辅助节点匹配的所有链接

  5. 获取辅助链接下的响应,进入第二步

这是一个非常理想化的有向图遍历模型,通过这样的规范化步骤,我们将能得到我们梦寐以求的数据

努力写出更好的爬取规则能大大减少爬虫需要遍历的页面,显著提高爬取速度哦!

数据内容模型(Content)

在寻路策略中我们提到了从响应体中进行内容匹配提取,对于实际的数据抽取,其情况要比想象中的复杂得多,必须得考虑一下情况:

  • 从响应体中的什么位置获取到数据,html/url/header还是cookie?

  • 从一个响应体中我们需要的内容模型完全可能不止一条,例如在https://github.com/zidoshare页面中,我们想要抽取项目名+描述,完全不需要进入到每个项目的具体页面就能执行,只需要外面展示的多个Pinned repositories即可。当然,如果你需要获取到readme的简述,那还是必须的进入页面才行啦~

  • 我们需要的某个属性也可能不止一条,例如还是在https://github.com/zidoshare页面中,我们需要抽取到此用户以及它固定的6个项目的名称,我们不需要存储6个数据模型,直接整合到一起(当然也可能直接抽取出6条数据,那是再正常不过的啦)。

  • 每个属性具体结果的复杂性,比如你想爬取一篇文章,那么你可能需要获取纯文本,也可能想在纯文本基础上保留里面的图片视频这些多媒体内容或者直接保存html自行进行处理。

...当然还有更多更复杂的需求,就不一一叙述了

综合了各种可能出现的情况,最终我们通过语义化api实现了hold住分布式的优雅的通用解决方案。

  1. 你能通过语义化api从response中的任何地方获取数据

  2. response的html/xml中(仅支持html/xml),我们提供了分块(parition),通过使用分块,你能将网页分割成数个小块,他们可能拥有类似或者不同的内容,这将由你的抓取器自行决定,他们最终会组合成为多个数据内容结果。

  3. 对于每一个内容结果的属性,我们默认它就是多条的,所以你能够随意进行任何的选择

  4. 我们为内容提供了多种持久化选项,除了纯文本、html等元素外,还额外的提供了富文本类型,他剔除了多余的样式,保留了原来的文本信息,并且还把多媒体内容信息也截留了下来。为使用者尽可能的提供方便。

好啦~简单的了解了思想之后,我们快开始吧!

....未完待续