分布式網(wǎng)絡(luò)爬蟲(chóng)greenfinger使用介紹(上篇)

Greenfinger是一款用Java編寫(xiě)的酵使,高性能的实辑,面向擴(kuò)展的分布式網(wǎng)絡(luò)爬蟲(chóng)框架铛碑,它基于SpringBoot框架,通過(guò)一些配置參數(shù)病蛉,就可以輕松地搭建一個(gè)分布式網(wǎng)絡(luò)爬蟲(chóng)微服務(wù)并且可以組建集群。此外瑰煎,Greenfinger框架還提供了大量豐富的API去定制你的應(yīng)用系統(tǒng)铺然。

框架特性


  1. 完美兼容 SpringBoot2.2.0(or later)
  2. 支持通用型和垂直型爬蟲(chóng)
  3. 采用深度優(yōu)先爬取策略
  4. 設(shè)計(jì)成多進(jìn)程高可用的爬蟲(chóng)架構(gòu),支持動(dòng)態(tài)水平擴(kuò)展和負(fù)載均衡
  5. 內(nèi)置多種負(fù)載均衡算法或自定義負(fù)載均衡算法
  6. 支持全量索引和增量索引
  7. 支持定時(shí)任務(wù)來(lái)更新索引
  8. 支持多種主流的Http客戶端解析技術(shù)
  9. 支持億級(jí)URL去重
  10. 內(nèi)置多種條件中斷策略或自定義條件中斷策略
  11. 多版本索引查詢機(jī)制

兼容性


  1. jdk8 (or later)
  2. SpringBoot Framework 2.2.x (or later)
  3. Redis 3.x (or later)
  4. PostgreSQL 9.x (or later)
  5. ElasticSearch 6.x (or later)
    說(shuō)明:
    • Redis用來(lái)存取集群信息
    • PostgreSQL用來(lái)存取爬取到的URL信息
    • ElasticSearch用來(lái)創(chuàng)建索引和提供檢索功能

如何安裝


├── greenfinger
|  ├── greenfinger-console
|  |  ├── pom.xml
|  |  └── src
|  ├── greenfinger-spring-boot-starter
|  |  ├── pom.xml
|  |  └── src
|  ├── LICENSE
|  ├── pom.xml
|  └── README.md
  • 軟件說(shuō)明:
    • greenfinger-console
      Greenfinger的Web版酒甸,獨(dú)立的SpringBoot應(yīng)用程序, 自帶管理界面魄健,可以新增、修改插勤、啟動(dòng)沽瘦、停止爬蟲(chóng)任務(wù)等, 并提供搜索界面實(shí)時(shí)查詢
    • greenfinger-spring-boot-starter
      Greenfinger 核心jar,實(shí)現(xiàn)了上述所有的框架特性农尖,對(duì)外提供了爬蟲(chóng)管理和搜索等Rest API, 引入jar包析恋,可以定制你自己的系統(tǒng)

安裝 greenfinger-console:


Step1: 進(jìn)入greenfinger-console目錄
Step2: 執(zhí)行命令:mvn clean install
Step3: 執(zhí)行成功后會(huì)多出一個(gè)目錄run, 把此目錄移動(dòng)到你的工作目錄(自己指定的目錄)下即可
Step4: 運(yùn)行jar: java -jar greenfinger-console-1.0-RC2.jar --spring.config.location=config/ (命令僅供參考)

  • 生成的run目錄結(jié)構(gòu):
├── config
|  ├── application-dev.properties
|  └── application.properties
├── db
|  └── crawler.sql
├── greenfinger-console-1.0-RC2.jar
├── lib
|  ├── aggs-matrix-stats-client-6.8.6.jar
|  ├── aspectjweaver-1.9.5.jar
|  ├── chaconne-spring-boot-starter-1.0-RC2.jar
|  ├── checker-compat-qual-2.5.5.jar
|  ├── classmate-1.5.1.jar
|  ├── commons-codec-1.13.jar
|  ├── commons-io-2.6.jar
|  ├── ...
└── logs
   └── atlantis
  • 參考配置:
    greenfinger-console界面用的是freemarker,目前有兩個(gè)配置文件卤橄,application.properties和application-dev.properties

下面是greenfinger-console的默認(rèn)配置(可以根據(jù)實(shí)際情況擴(kuò)展):
application.properties 配置,主要存放一下全局配置:

spring.application.name=greenfinger-console
spring.application.cluster.name=greenfinger-console-cluster

#Freemarker Configuration
spring.freemarker.enabled=true
spring.freemarker.suffix=.ftl
spring.freemarker.cache=false
spring.freemarker.charset=UTF-8
spring.freemarker.template-loader-path=classpath:/META-INF/templates/
spring.freemarker.expose-request-attributes=true
spring.freemarker.expose-session-attributes=true
spring.freemarker.setting.number_format=#
spring.freemarker.setting.locale=en_US
spring.freemarker.setting.url_escaping_charset=UTF-8

server.port=21212
server.servlet.context-path=/atlantis/greenfinger

spring.profiles.active=dev

application-dev.properties 配置:

#Jdbc Configuration
atlantis.framework.greenfinger.datasource.jdbcUrl=jdbc:postgresql://localhost:5432/db_webanchor
atlantis.framework.greenfinger.datasource.username=fengy
atlantis.framework.greenfinger.datasource.password=123456
atlantis.framework.greenfinger.datasource.driverClassName=org.postgresql.Driver

#Redis Configuration
atlantis.framework.redis.host=localhost
atlantis.framework.redis.port=6379
atlantis.framework.redis.password=123456
atlantis.framework.redis.database=0

spring.redis.messager.pubsub.channel=greenfinger-console-messager-pubsub

#Vortex Configuration
atlantis.framework.vortex.bufferzone.collectionName=MyGarden
atlantis.framework.vortex.bufferzone.pullSize=100

#Elasticsearch Configuration
spring.data.elasticsearch.cluster-name=es
spring.data.elasticsearch.cluster-nodes=localhost:9300
spring.data.elasticsearch.repositories.enabled=true
spring.data.elasticsearch.properties.transport.tcp.connect_timeout=60s

#Chaconne Configuration
#atlantis.framework.chaconne.producer.location=http://localhost:6543
#atlantis.framework.chaconne.mail.host=smtp.your_company.com
#atlantis.framework.chaconne.mail.username=your_email@your_company.com
#atlantis.framework.chaconne.mail.password=0123456789
#atlantis.framework.chaconne.mail.default-encoding=UTF-8

webcrawler.pagesource.selenium.webdriverExecutionPath=D:\\software\\chromedriver_win32\\chromedriver.exe

logging.level.indi.atlantis.framework.greenfinger=INFO

說(shuō)明:
application-dev.properties配置了greenfinger依賴的一些外部資源喇颁,默認(rèn)情況嚎货,greenfinger將爬取到的鏈接信息存儲(chǔ)在PostgesSQL橘霎,當(dāng)然,你也可以存儲(chǔ)在其他地方(比如Nosql數(shù)據(jù)庫(kù)或文件格式)殖属,前面說(shuō)過(guò)姐叁,greenfinger是面向擴(kuò)展的網(wǎng)絡(luò)爬蟲(chóng),它提供了豐富的API去做擴(kuò)展外潜,我會(huì)在后面關(guān)于講述greenfinger實(shí)現(xiàn)原理一文中詳細(xì)講解。
上述配置中的地址信息等处窥,你要根據(jù)自己的情況做修改
注意:在jdk8下嘱吗,啟動(dòng)greenfinger-console可能會(huì)報(bào)錯(cuò)(提示你jdk版本過(guò)低),所以你可能需要用jdk11的環(huán)境滔驾,本人在jdk11下可以運(yùn)行成功谒麦,其他版本暫未試過(guò)。

如何自定義你的爬蟲(chóng)應(yīng)用程序绕德?


Step1: 添加 maven:

<dependency>
    <groupId>com.github.paganini2008.atlantis</groupId>
    <artifactId>greenfinger-spring-boot-starter</artifactId>
    <version>1.0-RC3</version>
</dependency>

Step2: 參考代碼:

@EnableGreenFingerServer
@SpringBootApplication
public class GreenFingerServerConsoleMain {

    public static void main(String[] args) {
        SpringApplication.run(GreenFingerServerConsoleMain.class, args);
    }
}

Step3: 參考配置:

spring.application.name=cool-crawler
spring.application.cluster.name=cool-crawler-cluster

#Jdbc Configuration
spring.datasource.jdbcUrl=jdbc:postgresql://localhost:5432/db_webanchor
spring.datasource.username=fengy
spring.datasource.password=123456
spring.datasource.driverClassName=org.postgresql.Driver

#Redis Configuration
spring.redis.host=localhost
spring.redis.port=6379
spring.redis.password=123456
spring.redis.messager.pubsub.channel=greenfinger-console-messager-pubsub

#Vortex Configuration
atlantis.framework.vortex.bufferzone.collectionName=MyGarden
atlantis.framework.vortex.bufferzone.pullSize=100

#Elasticsearch Configuration
spring.data.elasticsearch.cluster-name=es
spring.data.elasticsearch.cluster-nodes=localhost:9300
spring.data.elasticsearch.repositories.enabled=true
spring.data.elasticsearch.properties.transport.tcp.connect_timeout=60s

#Chaconne Configuration
#atlantis.framework.chaconne.producer.location=http://localhost:6543
#atlantis.framework.chaconne.mail.host=smtp.your_company.com
#atlantis.framework.chaconne.mail.username=your_email@your_company.com
#atlantis.framework.chaconne.mail.password=0123456789
#atlantis.framework.chaconne.mail.default-encoding=UTF-8

#webcrawler.pagesource.selenium.webdriverExecutionPath=D:\\software\\chromedriver_win32\\chromedriver.exe

#logging.level.indi.atlantis.framework.greenfinger=INFO

上述配置你可以根據(jù)自己的情況做修改

Greenfinger-Console 使用介紹:


  • 首先摊阀,說(shuō)一下目錄資源概念:
    在Greenfinger框架中,對(duì)于每一個(gè)目標(biāo)網(wǎng)站(待爬取的網(wǎng)站)驹溃,都被稱之為Catalog(目錄)延曙,而對(duì)于每一個(gè)從它上面爬取下來(lái)的URL, 則代表為一個(gè)Resource(資源)
  • 目前Greenfinger的Web版界面還在持續(xù)改進(jìn)中,所以看上去比較樸素

輸入首頁(yè)地址:http://localhost:21212/atlantis/greenfinger/catalog/

  • 查看目錄列表

    image.png

    操作說(shuō)明:

    • 【Edit】 編輯目錄
    • 【Delete】刪除目錄(包括目錄下的資源和索引)
    • 【Clean】 清理目錄(包括目錄下的資源和索引枝缔,但目錄還在,版本號(hào)歸 0)
    • 【Rebuild】重構(gòu)目錄(即開(kāi)啟一個(gè)爬蟲(chóng)愿卸,重新爬取該目錄,并建索引儒溉,版本號(hào)遞增)
    • 【Update】更新目錄(即開(kāi)啟一個(gè)爬蟲(chóng),接著最近的一次爬取地址繼續(xù)爬取和更新目錄顿涣,并建索引,版本號(hào)不變)
      當(dāng)爬蟲(chóng)運(yùn)行的時(shí)候涛碑,你還可以:
    • 【Stop】停止爬蟲(chóng)運(yùn)行
    • 【Realtime】監(jiān)控爬蟲(chóng)運(yùn)行統(tǒng)計(jì)等
  • 新建或保存目錄:

    image.png

    說(shuō)明:

  • Name: 目錄名稱
  • Cat: 分類名稱
  • URL: 初始地址
  • Page Encoding: 頁(yè)面編碼
  • Path Pattern: URL匹配模式孵淘,可以多個(gè),逗號(hào)分隔
  • Excluded Path Pattern: 排除的URL匹配模式,可以多個(gè)庄撮,逗號(hào)分隔
  • Max Fetch Size: 最大爬取的鏈接數(shù)量(默認(rèn)100000)
  • Duration: 爬蟲(chóng)的運(yùn)行時(shí)間,輸入毫秒值(默認(rèn)20分鐘)重窟,即超過(guò)此時(shí)間惧财,爬蟲(chóng)就自動(dòng)結(jié)束爬取工作
  • 監(jiān)控爬蟲(chóng)運(yùn)行情況:
    image.png
  • 爬蟲(chóng)一邊在爬巡扇,你也可以實(shí)時(shí)地用關(guān)鍵字搜索:
    image.png
  • 不輸關(guān)鍵字垮衷,則查詢?nèi)浚?/strong>
    image.png

最后,由于Greenfinger框架復(fù)雜度較高搀突,它綜合運(yùn)用了微服務(wù)分布式協(xié)作框架tridenter、分布式流式處理框架vortex仰迁、分布式任務(wù)調(diào)度框架chaconne 3個(gè)框架的核心內(nèi)容,所以本篇主要講述的是如何操作Greenfinger-Console界面來(lái)創(chuàng)建爬蟲(chóng)任務(wù)施蜜,運(yùn)行爬蟲(chóng),最后關(guān)鍵字搜索爬取到的內(nèi)容翻默,限于篇幅恰起,后面會(huì)著重寫(xiě)一篇關(guān)于Greenfinger實(shí)現(xiàn)原理的文章修械。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
禁止轉(zhuǎn)載检盼,如需轉(zhuǎn)載請(qǐng)通過(guò)簡(jiǎn)信或評(píng)論聯(lián)系作者。
  • 序言:七十年代末吨枉,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子剂桥,更是在濱河造成了極大的恐慌,老刑警劉巖权逗,帶你破解...
    沈念sama閱讀 211,743評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異斟薇,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)堪滨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)袱箱,“玉大人,你說(shuō)我怎么就攤上這事发笔。” “怎么了捻激?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,285評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵前计,是天一觀的道長(zhǎng)胞谭。 經(jīng)常有香客問(wèn)我男杈,道長(zhǎng),這世上最難降的妖魔是什么势就? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,485評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上侧巨,老公的妹妹穿的比我還像新娘。我一直安慰自己司忱,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,581評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布坦仍。 她就那樣靜靜地躺著,像睡著了一般幔荒。 火紅的嫁衣襯著肌膚如雪糊闽。 梳的紋絲不亂的頭發(fā)上爹梁,一...
    開(kāi)封第一講書(shū)人閱讀 49,821評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音姚垃,去河邊找鬼。 笑死积糯,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的梆暮。 我是一名探鬼主播,決...
    沈念sama閱讀 38,960評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼啦粹,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼窘游!你這毒婦竟也來(lái)了唠椭?” 一聲冷哼從身側(cè)響起忍饰,我...
    開(kāi)封第一講書(shū)人閱讀 37,719評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎艾蓝,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體亮靴,經(jīng)...
    沈念sama閱讀 44,186評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡于置,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,516評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了八毯。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,650評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡话速,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出泊交,到底是詐尸還是另有隱情柱查,我是刑警寧澤雏婶,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站留晚,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏错维。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,936評(píng)論 3 313
  • 文/蒙蒙 一赋焕、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧隆判,春花似錦、人聲如沸侨嘀。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,757評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至纽帖,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間懊直,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,991評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工吹截, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留凝危,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,370評(píng)論 2 360
  • 正文 我出身青樓蛾默,卻偏偏與公主長(zhǎng)得像捉貌,于是被迫代替她去往敵國(guó)和親支鸡。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,527評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容