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)铺然。
框架特性
- 完美兼容 SpringBoot2.2.0(or later)
- 支持通用型和垂直型爬蟲(chóng)
- 采用深度優(yōu)先爬取策略
- 設(shè)計(jì)成多進(jìn)程高可用的爬蟲(chóng)架構(gòu),支持動(dòng)態(tài)水平擴(kuò)展和負(fù)載均衡
- 內(nèi)置多種負(fù)載均衡算法或自定義負(fù)載均衡算法
- 支持全量索引和增量索引
- 支持定時(shí)任務(wù)來(lái)更新索引
- 支持多種主流的Http客戶端解析技術(shù)
- 支持億級(jí)URL去重
- 內(nèi)置多種條件中斷策略或自定義條件中斷策略
- 多版本索引查詢機(jī)制
兼容性
- jdk8 (or later)
- SpringBoot Framework 2.2.x (or later)
- Redis 3.x (or later)
- PostgreSQL 9.x (or later)
- ElasticSearch 6.x (or later)
說(shuō)明:- Redis用來(lái)存取集群信息
- PostgreSQL用來(lái)存取爬取到的URL信息
- ElasticSearch用來(lái)創(chuàng)建索引和提供檢索功能
如何安裝
- Git地址:
https://github.com/paganini2008/greenfinger.git - 目錄結(jié)構(gòu):
├── 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:
安裝 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/
-
查看目錄列表
操作說(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ì)等
-
新建或保存目錄:
說(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)行情況:
-
爬蟲(chóng)一邊在爬巡扇,你也可以實(shí)時(shí)地用關(guān)鍵字搜索:
-
不輸關(guān)鍵字垮衷,則查詢?nèi)浚?/strong>
最后,由于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)原理的文章修械。