分布式網絡爬蟲greenfinger使用介紹(上篇)

Greenfinger是一款用Java編寫的,高性能的,面向擴展的分布式網絡爬蟲框架,它基于SpringBoot框架,通過一些配置參數(shù),就可以輕松地搭建一個分布式網絡爬蟲微服務并且可以組建集群。此外,Greenfinger框架還提供了大量豐富的API去定制你的應用系統(tǒng)。

框架特性


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

兼容性


  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)
    說明:
    • Redis用來存取集群信息
    • PostgreSQL用來存取爬取到的URL信息
    • ElasticSearch用來創(chuàng)建索引和提供檢索功能

如何安裝


├── 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:


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)原理的文章。

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

相關閱讀更多精彩內容

友情鏈接更多精彩內容