如何設計一個比較通用的爬蟲系統

如何設計一個比較通用的爬蟲系統

背景介紹

最近老大讓我設計一個爬蟲系統,主要流程就是用戶輸入關鍵字,然後去指定網頁去檢索結果,並且對結果進行保存,然後把結果發送給指定用戶。
根據老大的這個需求,我想了很多事情。

頁面差異

首先,這個爬蟲解析數據部分肯定要抽取出來,因爲不同頁面的爬取方式不同。

結果集不同

結果集不同,保存的方法可能也不同。可能有時候讓爬取百度搜索的結果,保存標題,url等信息。可能後面要爬文章的信息,文章信息包括標題,內容等,要存到另一個表裏面,因此抽出來。

要發送哪些結果給用戶

我們這些數據要發送給用戶,我們的需求是不能重複發送,可能下次每次都要發送,因此也抽出來。

怎麼發送這些數據給用戶

我們這次是用郵箱方式發送給用戶的,萬一下次要發送短信呢,因此也抽出來

項目依賴介紹

Spring Boot
Mybatis
Jsoup
Okhttp

表結構

CRAWL_CONFIG
在這裏插入圖片描述
這個表用於配置要爬取的網站的信息,結構裏定義了結果解析器的bean名

CRAWL_DATA_INFO
在這裏插入圖片描述
這個表裏保存了爬到的數據,我們需要標題,還有url

CRAWL_USER_CONFIG

這裏就是配置的用戶信息了,用戶需要爬取那個網站的信息,關鍵字是什麼,數據怎麼獲取,數據獲取後怎麼發送給用戶,都在這個表裏配置

CRAWL_SENDED_HISTORY
在這裏插入圖片描述
這裏是發送歷史表,我們這邊的要求是發送過就不再發送

代碼類間關係

在這裏插入圖片描述

在這裏插入圖片描述
這個接口主要用於解析網站的數據,然後返回結果。不同網站解析結果方式不同,因此抽出來

在這裏插入圖片描述
這個接口用於對爬取結果的處理,比如我們要保存到xxxx表,然後可能結果不同,然後保存的表也不同,因此抽取

在這裏插入圖片描述
這個接口用於獲取數據,不過這個數據是從表裏獲取的。根據用戶的id,然後去獲得需要發送給他的數據。

在這裏插入圖片描述
獲取數據後,需要發送給用戶。這個數據的發送就是通過這個接口來實現。可能這次要發送郵件,下次就要發送短信了,抽出來方便拓展

操作流程

在這裏插入圖片描述
這是爬取數據的流程,首先我需要去用戶關注的關鍵字配置表裏面去獲得所有有效的用戶信息,然後根據用戶關注的網站去獲得數據解析的bean名,然後去實例容器裏面獲得bean,然後再調用bean裏面的方法來獲得數據,然後再獲得結果保存類,對結果進行保存(一些安全校驗我就沒加了,比如接口判斷)

在這裏插入圖片描述
這是對結果進行處理的流程,遍歷所有需要發送的用戶信息,然後獲得數據獲取bean實例,調用獲得數據集。然後獲得結果處理bean實例,對結果進行操作,發送給用戶。

整體流程就是這樣了,其他代碼我就不貼出來了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章