Greenfinger是一款用Java編寫的,高性能的,面向擴展的分布式網絡爬蟲框架,它基于SpringBoot框架,通過一些配置參數(shù),就可以輕松地搭建一個分布式網絡爬蟲微服務并且可以組建集群。此外,Greenfinger框架還提供了大量豐富的API去定制你的應用系統(tǒng)。
框架特性
- 完美兼容 SpringBoot2.2.0(or later)
- 支持通用型和垂直型爬蟲
- 采用深度優(yōu)先爬取策略
- 設計成多進程高可用的爬蟲架構,支持動態(tài)水平擴展和負載均衡
- 內置多種負載均衡算法或自定義負載均衡算法
- 支持全量索引和增量索引
- 支持定時任務來更新索引
- 支持多種主流的Http客戶端解析技術
- 支持億級URL去重
- 內置多種條件中斷策略或自定義條件中斷策略
- 多版本索引查詢機制
兼容性
- 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)
說明:- Redis用來存取集群信息
- PostgreSQL用來存取爬取到的URL信息
- ElasticSearch用來創(chuàng)建索引和提供檢索功能
如何安裝
- Git地址:
https://github.com/paganini2008/greenfinger.git - 目錄結構:
├── greenfinger
| ├── greenfinger-console
| | ├── pom.xml
| | └── src
| ├── greenfinger-spring-boot-starter
| | ├── pom.xml
| | └── src
| ├── LICENSE
| ├── pom.xml
| └── README.md
- 軟件說明:
-
greenfinger-console:
Greenfinger的Web版,獨立的SpringBoot應用程序, 自帶管理界面,可以新增、修改、啟動、停止爬蟲任務等, 并提供搜索界面實時查詢 -
greenfinger-spring-boot-starter:
Greenfinger 核心jar,實現(xiàn)了上述所有的框架特性,對外提供了爬蟲管理和搜索等Rest API, 引入jar包,可以定制你自己的系統(tǒng)
-
greenfinger-console:
安裝 greenfinger-console:
Step1: 進入greenfinger-console目錄
Step2: 執(zhí)行命令:mvn clean install
Step3: 執(zhí)行成功后會多出一個目錄run, 把此目錄移動到你的工作目錄(自己指定的目錄)下即可
Step4: 運行jar: java -jar greenfinger-console-1.0-RC2.jar --spring.config.location=config/ (命令僅供參考)
- 生成的run目錄結構:
├── 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,目前有兩個配置文件,application.properties和application-dev.properties
下面是greenfinger-console的默認配置(可以根據實際情況擴展):
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
說明:
application-dev.properties配置了greenfinger依賴的一些外部資源,默認情況,greenfinger將爬取到的鏈接信息存儲在PostgesSQL,當然,你也可以存儲在其他地方(比如Nosql數(shù)據庫或文件格式),前面說過,greenfinger是面向擴展的網絡爬蟲,它提供了豐富的API去做擴展,我會在后面關于講述greenfinger實現(xiàn)原理一文中詳細講解。
上述配置中的地址信息等,你要根據自己的情況做修改
注意:在jdk8下,啟動greenfinger-console可能會報錯(提示你jdk版本過低),所以你可能需要用jdk11的環(huán)境,本人在jdk11下可以運行成功,其他版本暫未試過。
如何自定義你的爬蟲應用程序?
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
上述配置你可以根據自己的情況做修改
Greenfinger-Console 使用介紹:
- 首先,說一下目錄和資源概念:
在Greenfinger框架中,對于每一個目標網站(待爬取的網站),都被稱之為Catalog(目錄),而對于每一個從它上面爬取下來的URL, 則代表為一個Resource(資源) - 目前Greenfinger的Web版界面還在持續(xù)改進中,所以看上去比較樸素
輸入首頁地址:http://localhost:21212/atlantis/greenfinger/catalog/
-
查看目錄列表
image.png
操作說明:- 【Edit】 編輯目錄
- 【Delete】刪除目錄(包括目錄下的資源和索引)
- 【Clean】 清理目錄(包括目錄下的資源和索引,但目錄還在,版本號歸 0)
- 【Rebuild】重構目錄(即開啟一個爬蟲,重新爬取該目錄,并建索引,版本號遞增)
- 【Update】更新目錄(即開啟一個爬蟲,接著最近的一次爬取地址繼續(xù)爬取和更新目錄,并建索引,版本號不變)
當爬蟲運行的時候,你還可以: - 【Stop】停止爬蟲運行
- 【Realtime】監(jiān)控爬蟲運行統(tǒng)計等
-
新建或保存目錄:
image.png
說明:
- Name: 目錄名稱
- Cat: 分類名稱
- URL: 初始地址
- Page Encoding: 頁面編碼
- Path Pattern: URL匹配模式,可以多個,逗號分隔
- Excluded Path Pattern: 排除的URL匹配模式,可以多個,逗號分隔
- Max Fetch Size: 最大爬取的鏈接數(shù)量(默認100000)
- Duration: 爬蟲的運行時間,輸入毫秒值(默認20分鐘),即超過此時間,爬蟲就自動結束爬取工作
-
監(jiān)控爬蟲運行情況:
image.png -
爬蟲一邊在爬,你也可以實時地用關鍵字搜索:
image.png -
不輸關鍵字,則查詢全部:
image.png
最后,由于Greenfinger框架復雜度較高,它綜合運用了微服務分布式協(xié)作框架tridenter、分布式流式處理框架vortex、分布式任務調度框架chaconne 3個框架的核心內容,所以本篇主要講述的是如何操作Greenfinger-Console界面來創(chuàng)建爬蟲任務,運行爬蟲,最后關鍵字搜索爬取到的內容,限于篇幅,后面會著重寫一篇關于Greenfinger實現(xiàn)原理的文章。




