目录
1 Gather Platform项目简介... 2
2 Gather Platform代码结构... 3
3 前端界面功能部分... 3
4 数据抓取解析部分... 3
4.1 Webmagic框架简要分析... 3
4.2 HanLP框架简要分析... 6
4.1 PhantomJS框架简要分析... 9
4.2 数据抓取部分代码分析... 9
4.3 数据解析部分代码分析... 9
4.4 数据存贮部分代码分析... 9
[if !supportLists]1 [endif]Gather Platform项目简介
Gather Platform这个带图形化操作与配置界面的网络爬虫在github上的地址是,https://github.com/gsh199449/spider。
Gather Platform的交流 QQ群是 206264662,在网上搜索看到这个开源的网络爬虫项目后,用起来还挺方便的,于是想深入了解它的运行原理,写了这篇源代码分析与解读,个人水平有限,只当是写给自己的一个学习笔记了。
Gather Platform 数据抓取平台是一套基于Webmagic内核的,具有Web任务配置和任务管理界面的数据采集与搜索平台。
具有以下功能:
[if !supportLists]1. [endif]根据配置的模板进行数据采集
[if !supportLists]2. [endif]在不配置采集模板的情况下自动检测网页正文,自动抽取文章发布时间
[if !supportLists]3. [endif]动态字段抽取与静态字段植入
[if !supportLists]4. [endif]已抓取数据的管理,包括:搜索,增删改查,按照新的数据模板重新抽取数据
[if !supportLists]5. [endif]对采集的数据进行NLP处理,包括:抽取关键词,抽取摘要,抽取实体词
[if !supportLists]6. [endif]含有相关文章推荐,文章中人物、地点之间的关联关系分析
具体功能与使用手册,大家可以看作者的官方手册网站,https://gsh199449.github.io/gather_platform_pages/,这里就不多说了,主要还是想了解下它的代码结构与代码运行过程。
[if !supportLists]2 [endif]Gather Platform代码结构
请看《Gather-Platform-工程与源代码分析-前端部分.docx》
[if !supportLists]3 [endif]前端界面功能部分
请看《Gather-Platform-工程与源代码分析-前端部分.docx》
[if !supportLists]4 [endif]数据抓取解析部分
[if !supportLists]4.1 [endif]Webmagic框架简要分析
WebMagic的结构分为Downloader、PageProcessor、Scheduler、Pipeline四大组件,并由Spider将它们彼此组织起来。这四大组件对应爬虫生命周期中的下载、处理、管理和持久化等功能。WebMagic的设计参考了Scapy,但是实现方式更Java化一些。
Spider将这几个组件组织起来,让它们可以互相交互,流程化的执行,可以认为Spider是一个大的容器,它也是WebMagic逻辑的核心。
WebMagic总体架构图如下:
Downloader负责从互联网上下载页面,以便后续处理。WebMagic默认使用了Apache
HttpClient作为下载工具。
PageProcessor负责解析页面,抽取有用信息,以及发现新的链接。WebMagic使用Jsoup作为HTML解析工具,并基于其开发了解析XPath的工具Xsoup。PageProcessor对于每个站点每个页面都不一样,是需要使用者定制的部分。
Scheduler负责管理待抓取的URL,以及一些去重的工作。WebMagic默认提供了JDK的内存队列来管理URL,并用集合来进行去重。也支持使用Redis进行分布式管理。除非项目有一些特殊的分布式需求,否则无需自己定制Scheduler。
Pipeline负责抽取结果的处理,包括计算、持久化到文件、数据库等。WebMagic默认提供了“输出到控制台”和“保存到文件”两种结果处理方案。Pipeline定义了结果保存的方式,如果你要保存到指定数据库,则需要编写对应的Pipeline。对于一类需求一般只需编写一个Pipeline。
另一方面,在这个框架内部还有一些用于数据流转的对象。
Request是对URL地址的一层封装,一个Request对应一个URL地址。
它是PageProcessor与Downloader交互的载体,也是PageProcessor控制Downloader唯一方式。除了URL本身外,它还包含一个Key-Value结构的字段extra。你可以在extra中保存一些特殊的属性,然后在其他地方读取,以完成不同的功能。例如附加上一个页面的一些信息等。
Page代表了从Downloader下载到的一个页面——可能是HTML,也可能是JSON或者其他文本格式的内容。Page是WebMagic抽取过程的核心对象,它提供一些方法可供抽取、结果保存等。在第四章的例子中,我们会详细介绍它的使用。
ResultItems相当于一个Map,它保存PageProcessor处理的结果,供Pipeline使用。它的API与Map很类似,值得注意的是它有一个字段skip,若设置为true,则不应被Pipeline处理。
Spider是WebMagic内部流程的核心。Downloader、PageProcessor、Scheduler、Pipeline都是Spider的一个属性,这些属性是可以自由设置的,通过设置这个属性可以实现不同的功能。Spider也是WebMagic操作的入口,它封装了爬虫的创建、启动、停止、多线程等功能。
一个典型的webmagic的爬虫代码样例如下:
[if !supportLists]4.2 [endif]HanLP框架简要分析
HanLP是一系列模型与算法组成的NLP工具包,由大快搜索主导并完全开源,目标是普及自然语言处理在生产环境中的应用。HanLP具备功能完善、性能高效、架构清晰、语料时新、可自定义的特点。
HanLP提供下列功能:
中文分词
HMM-Bigram(速度与精度最佳平衡;一百兆内存)
最短路分词、N-最短路分词
由字构词(侧重精度,全世界最大语料库,可识别新词;适合NLP任务)
感知机分词、CRF分词
词典分词(侧重速度,每秒数千万字符;省内存)
极速词典分词
所有分词器都支持:
索引全切分模式
用户自定义词典
兼容繁体中文
训练用户自己的领域模型
词性标注
HMM词性标注(速度快)
感知机词性标注、CRF词性标注(精度高)
命名实体识别
基于HMM角色标注的命名实体识别(速度快)
中国人名识别、音译人名识别、日本人名识别、地名识别、实体机构名识别
基于线性模型的命名实体识别(精度高)
感知机命名实体识别、CRF命名实体识别
关键词提取
TextRank关键词提取
自动摘要
TextRank自动摘要
短语提取
基于互信息和左右信息熵的短语提取
拼音转换
多音字、声母、韵母、声调
简繁转换
简繁分歧词(简体、繁体、臺灣正體、香港繁體)
文本推荐
语义推荐、拼音推荐、字词推荐
依存句法分析
基于神经网络的高性能依存句法分析器
MaxEnt依存句法分析
文本分类
情感分析
word2vec
词向量训练、加载、词语相似度计算、语义运算、查询、KMeans聚类
文档语义相似度计算
语料库工具
部分默认模型训练自小型语料库,鼓励用户自行训练。
我们具体看看作者的在线演示,感觉这个框架还是功能很强大的,不过水平无限,只能是简单了解下了。
[if !supportLists]4.1 [endif]PhantomJS框架简要分析
[if !supportLists]4.2 [endif]数据抓取部分代码分析
[if !supportLists]4.3 [endif]数据解析部分代码分析
[if !supportLists]4.4 [endif]数据存贮部分代码分析