Gather Platform-工程与源代码分析-数据抓取解析部分

目录

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]数据存贮部分代码分析

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,099评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,473评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,229评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,570评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,427评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,335评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,737评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,392评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,693评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,730评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,512评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,349评论 3 314
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,750评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,017评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,290评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,706评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,904评论 2 335

推荐阅读更多精彩内容

  • 对于java中的思考的方向,1必须要看前端的页面,对于前端的页面基本的逻辑,如果能理解最好,不理解也要知道几点。 ...
    神尤鲁道夫阅读 782评论 0 0
  • Sonar翻译 Sonar翻译... 1 User Guide(用户指南)... 2 第一章Fixing the ...
    pig_zzZ阅读 2,713评论 0 1
  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 13,684评论 0 38
  • 56个民族数组Plist文件如下: 百度云获取文件的链接:http://pan.baidu.com/s/1dFshr3r
    闲云悠鹤蝶恋舞阅读 746评论 0 1
  • 修改配置文件 在配置文件中,添加下列配置: 两台服务器都需要,配置文件中指定了当前实例的id和日志保存位置。两台服...
    魂狩阅读 296评论 0 0