Gather Platform-工程與源代碼分析-數(shù)據(jù)抓取解析部分

目錄

1??? Gather Platform項目簡介... 2

2??? Gather Platform代碼結(jié)構(gòu)... 3

3??????? 前端界面功能部分... 3

4??????? 數(shù)據(jù)抓取解析部分... 3

4.1??? Webmagic框架簡要分析... 3

4.2??? HanLP框架簡要分析... 6

4.1??? PhantomJS框架簡要分析... 9

4.2?????? 數(shù)據(jù)抓取部分代碼分析... 9

4.3?????? 數(shù)據(jù)解析部分代碼分析... 9

4.4?????? 數(shù)據(jù)存貯部分代碼分析... 9


?

[if !supportLists]1????[endif]Gather Platform項目簡介

Gather Platform這個帶圖形化操作與配置界面的網(wǎng)絡(luò)爬蟲在github上的地址是,https://github.com/gsh199449/spider

Gather Platform的交流 QQ群是?206264662,在網(wǎng)上搜索看到這個開源的網(wǎng)絡(luò)爬蟲項目后,用起來還挺方便的,于是想深入了解它的運行原理,寫了這篇源代碼分析與解讀,個人水平有限,只當(dāng)是寫給自己的一個學(xué)習(xí)筆記了。

Gather Platform 數(shù)據(jù)抓取平臺是一套基于Webmagic內(nèi)核的,具有Web任務(wù)配置和任務(wù)管理界面的數(shù)據(jù)采集與搜索平臺。

具有以下功能:

[if !supportLists]1.?????[endif]根據(jù)配置的模板進(jìn)行數(shù)據(jù)采集

[if !supportLists]2.?????[endif]在不配置采集模板的情況下自動檢測網(wǎng)頁正文,自動抽取文章發(fā)布時間

[if !supportLists]3.?????[endif]動態(tài)字段抽取與靜態(tài)字段植入

[if !supportLists]4.?????[endif]已抓取數(shù)據(jù)的管理,包括:搜索,增刪改查,按照新的數(shù)據(jù)模板重新抽取數(shù)據(jù)

[if !supportLists]5.?????[endif]對采集的數(shù)據(jù)進(jìn)行NLP處理,包括:抽取關(guān)鍵詞,抽取摘要,抽取實體詞

[if !supportLists]6.?????[endif]含有相關(guān)文章推薦,文章中人物、地點之間的關(guān)聯(lián)關(guān)系分析

具體功能與使用手冊,大家可以看作者的官方手冊網(wǎng)站,https://gsh199449.github.io/gather_platform_pages/,這里就不多說了,主要還是想了解下它的代碼結(jié)構(gòu)與代碼運行過程。

[if !supportLists]2??[endif]Gather Platform代碼結(jié)構(gòu)

請看《Gather-Platform-工程與源代碼分析-前端部分.docx》


[if !supportLists]3????[endif]前端界面功能部分

請看《Gather-Platform-工程與源代碼分析-前端部分.docx》


[if !supportLists]4????[endif]數(shù)據(jù)抓取解析部分

[if !supportLists]4.1 [endif]Webmagic框架簡要分析

WebMagic的結(jié)構(gòu)分為Downloader、PageProcessor、Scheduler、Pipeline四大組件,并由Spider將它們彼此組織起來。這四大組件對應(yīng)爬蟲生命周期中的下載、處理、管理和持久化等功能。WebMagic的設(shè)計參考了Scapy,但是實現(xiàn)方式更Java化一些。

Spider將這幾個組件組織起來,讓它們可以互相交互,流程化的執(zhí)行,可以認(rèn)為Spider是一個大的容器,它也是WebMagic邏輯的核心。

WebMagic總體架構(gòu)圖如下:


Downloader負(fù)責(zé)從互聯(lián)網(wǎng)上下載頁面,以便后續(xù)處理。WebMagic默認(rèn)使用了Apache

HttpClient作為下載工具。

PageProcessor負(fù)責(zé)解析頁面,抽取有用信息,以及發(fā)現(xiàn)新的鏈接。WebMagic使用Jsoup作為HTML解析工具,并基于其開發(fā)了解析XPath的工具Xsoup。PageProcessor對于每個站點每個頁面都不一樣,是需要使用者定制的部分。

Scheduler負(fù)責(zé)管理待抓取的URL,以及一些去重的工作。WebMagic默認(rèn)提供了JDK的內(nèi)存隊列來管理URL,并用集合來進(jìn)行去重。也支持使用Redis進(jìn)行分布式管理。除非項目有一些特殊的分布式需求,否則無需自己定制Scheduler。

Pipeline負(fù)責(zé)抽取結(jié)果的處理,包括計算、持久化到文件、數(shù)據(jù)庫等。WebMagic默認(rèn)提供了“輸出到控制臺”和“保存到文件”兩種結(jié)果處理方案。Pipeline定義了結(jié)果保存的方式,如果你要保存到指定數(shù)據(jù)庫,則需要編寫對應(yīng)的Pipeline。對于一類需求一般只需編寫一個Pipeline。

另一方面,在這個框架內(nèi)部還有一些用于數(shù)據(jù)流轉(zhuǎn)的對象。

Request是對URL地址的一層封裝,一個Request對應(yīng)一個URL地址。

它是PageProcessor與Downloader交互的載體,也是PageProcessor控制Downloader唯一方式。除了URL本身外,它還包含一個Key-Value結(jié)構(gòu)的字段extra。你可以在extra中保存一些特殊的屬性,然后在其他地方讀取,以完成不同的功能。例如附加上一個頁面的一些信息等。

Page代表了從Downloader下載到的一個頁面——可能是HTML,也可能是JSON或者其他文本格式的內(nèi)容。Page是WebMagic抽取過程的核心對象,它提供一些方法可供抽取、結(jié)果保存等。在第四章的例子中,我們會詳細(xì)介紹它的使用。

ResultItems相當(dāng)于一個Map,它保存PageProcessor處理的結(jié)果,供Pipeline使用。它的API與Map很類似,值得注意的是它有一個字段skip,若設(shè)置為true,則不應(yīng)被Pipeline處理。

Spider是WebMagic內(nèi)部流程的核心。Downloader、PageProcessor、Scheduler、Pipeline都是Spider的一個屬性,這些屬性是可以自由設(shè)置的,通過設(shè)置這個屬性可以實現(xiàn)不同的功能。Spider也是WebMagic操作的入口,它封裝了爬蟲的創(chuàng)建、啟動、停止、多線程等功能。

一個典型的webmagic的爬蟲代碼樣例如下:


[if !supportLists]4.2 [endif]HanLP框架簡要分析

HanLP是一系列模型與算法組成的NLP工具包,由大快搜索主導(dǎo)并完全開源,目標(biāo)是普及自然語言處理在生產(chǎn)環(huán)境中的應(yīng)用。HanLP具備功能完善、性能高效、架構(gòu)清晰、語料時新、可自定義的特點。

HanLP提供下列功能:

中文分詞

HMM-Bigram(速度與精度最佳平衡;一百兆內(nèi)存)

最短路分詞、N-最短路分詞

由字構(gòu)詞(側(cè)重精度,全世界最大語料庫,可識別新詞;適合NLP任務(wù))

感知機(jī)分詞、CRF分詞

詞典分詞(側(cè)重速度,每秒數(shù)千萬字符;省內(nèi)存)

極速詞典分詞

所有分詞器都支持:

索引全切分模式

用戶自定義詞典

兼容繁體中文

訓(xùn)練用戶自己的領(lǐng)域模型

詞性標(biāo)注

HMM詞性標(biāo)注(速度快)

感知機(jī)詞性標(biāo)注、CRF詞性標(biāo)注(精度高)

命名實體識別

基于HMM角色標(biāo)注的命名實體識別(速度快)

中國人名識別、音譯人名識別、日本人名識別、地名識別、實體機(jī)構(gòu)名識別

基于線性模型的命名實體識別(精度高)

感知機(jī)命名實體識別、CRF命名實體識別

關(guān)鍵詞提取

TextRank關(guān)鍵詞提取

自動摘要

TextRank自動摘要

短語提取

基于互信息和左右信息熵的短語提取

拼音轉(zhuǎn)換

多音字、聲母、韻母、聲調(diào)

簡繁轉(zhuǎn)換

簡繁分歧詞(簡體、繁體、臺灣正體、香港繁體)

文本推薦

語義推薦、拼音推薦、字詞推薦

依存句法分析

基于神經(jīng)網(wǎng)絡(luò)的高性能依存句法分析器

MaxEnt依存句法分析

文本分類

情感分析

word2vec

詞向量訓(xùn)練、加載、詞語相似度計算、語義運算、查詢、KMeans聚類

文檔語義相似度計算

語料庫工具

部分默認(rèn)模型訓(xùn)練自小型語料庫,鼓勵用戶自行訓(xùn)練。

我們具體看看作者的在線演示,感覺這個框架還是功能很強(qiáng)大的,不過水平無限,只能是簡單了解下了。



[if !supportLists]4.1?? [endif]PhantomJS框架簡要分析


[if !supportLists]4.2 [endif]數(shù)據(jù)抓取部分代碼分析



[if !supportLists]4.3 [endif]數(shù)據(jù)解析部分代碼分析



[if !supportLists]4.4 [endif]數(shù)據(jù)存貯部分代碼分析

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 對于java中的思考的方向,1必須要看前端的頁面,對于前端的頁面基本的邏輯,如果能理解最好,不理解也要知道幾點。 ...
    神尤魯?shù)婪?/span>閱讀 901評論 0 0
  • Sonar翻譯 Sonar翻譯... 1 User Guide(用戶指南)... 2 第一章Fixing the ...
    pig_zzZ閱讀 3,093評論 0 1
  • Lua 5.1 參考手冊 by Roberto Ierusalimschy, Luiz Henrique de F...
    蘇黎九歌閱讀 14,257評論 0 38
  • 修改配置文件 在配置文件中,添加下列配置: 兩臺服務(wù)器都需要,配置文件中指定了當(dāng)前實例的id和日志保存位置。兩臺服...
    魂狩閱讀 318評論 0 0
  • 我無法傳達(dá)我自己 從何說起 要如何翻譯我愛你 寂寞不已
    甜一小貓閱讀 155評論 0 0

友情鏈接更多精彩內(nèi)容