曹培 林永意



摘要:大數據和人工智能的發展,使得網絡上的信息呈爆炸式增長。如何從海量數據中迅速精準地挖掘出有效信息已經成為一個研究熱點。文章以爬蟲框架Scarpy為基礎,結合Redis、布隆過濾器(Bloom Filter,BF)和PostgreSQL數據庫,設計并實現了一種基于Scrapy的崗位推薦系統。該系統可以從指定的URL獲取信息,存入數據庫,并以網頁或者郵件的形式呈現給用戶。
關鍵詞:崗位推薦系統;布隆過濾器;Scarpy;PostgreSQL
中圖分類號:TP311? 文獻標志碼:A
0 引言
近年來,科學技術正發生著日新月異的變化,互聯網已經成為人們獲取信息的主要渠道[1]。在大數據時代,搜索引擎作為一種常見的互聯網應用,已經成為人類與互聯網海量信息的連接橋梁。網絡爬蟲(Web Spider)是一種可以自動提取網頁數據的程序[2],可以幫助搜索引擎從互聯網上下載頁面信息,是搜索引擎的一個重要組成部分。
1 相關技術綜述
1.1 Scrapy爬蟲框架
Scrapy是一個基于Python的可爬取網站數據,并提取結構化數據的應用框架,其工作原理如圖1所示。
各組件的職能如下[3-4]。
Scrapy Engine(引擎):負責Scheduler、ItemPileline、Spiders以及Downloader 4個組件之間的通信和數據傳輸,是整個爬蟲的中樞組件。
Scheduler(調度器):接收來自Scrapy Engine的請求,并按特定的規則整理排序入隊,當Scrapy Engine有需求時,再還給Scrapy Engine。
Downloader(下載器):下載Scrapy Engine發出的所有請求,并將收集到的響應回傳給Scrapy Engine,Scrapy Engine后續交給Spiders來處理。
Spiders(爬蟲):處理Scrapy Engine傳來的響應,分析提取Item字段所需要的數據,同時將需要跟進的統一資源定位器(Uniform Resource Locator,URL)交給Scrapy Engine。
Item Pipeline(管道):處理被Spider提取出來的Item,并作分析、過濾、存儲等后續處理。數據被存入Item后,將被送到Pipeline,經過處理后存入數據庫或者本地文件。
Downloader Middlewares(下載器中間件):可看作一個自定義的擴展下載組件,處理下載器傳遞給Scrapy Engine的響應。
Spider Middlewares(Spider中間件):一個自定義的擴展組件,處理Scrapy Engine和Spider之間的通信。
1.2 Bloom Filter
Bloom Filter[5]是布隆在1970年提出的。Bloom Filter是一種專門解決去重問題的高級數據結構,其實質是一系列隨機映射函數和一個二進制向量。Bloom Filter可以用來檢索一個元素在一個集合中是否存在。較之其他數據結構,Bloom Filter在空間和時間方面都有著巨大的優勢。Bloom Filter有2個基本的指令bf.exists和bf.add。bf.exists用于判斷元素是否存在于功率器中,bf.add用于添加元素。
網絡爬蟲[7]是Bloom Filter的一個常用場景,可以用來去除已經爬取過的URL。在項目應用中,將已經爬取過的URL放入Bloom Filter,每當訪問新的URL時,先查詢Bloom Filter,如果存在,則說明此網頁已經被訪問過了,無需再進行下一步操作。如果不存在,則說明該網頁沒有被訪問過,還需要進行數據爬取。RedisBloom作為Redis的一個模塊,不僅提供了常見的緩存功能,而且還對布隆過濾器的高效性能和占用空間作了優化。
2 系統設計與實現
2.1 系統技術架構
系統的技術架構如圖2所示。系統部署在某公有云平臺,公有云可以降低部署、管理、維護成本,縮短開發周期。另外,公有云的功能更全面,性能更穩定。Python語言配置方便簡單、字符處理靈活便捷且有豐富的網絡抓取模塊,因此,本系統使用Python語言進行開發。版本使用Python Anaconda 發行版,Anaconda提供了一個輕松安裝、管理、更新Python包的管理系統和大量常用的科學計算庫,另外,Anaconda還提供了一個用于瀏覽、安裝和管理各種包、環境以及工具的可視化界面。爬蟲開發技術組件使用Scrapy、Scrapyd、Redis。其中,Scrapy為爬蟲框架,Scrapyd主要負責爬蟲的管理、部署、運行(包括日志服務)等工作,Redis提供布隆過濾器組件。服務組件提供網頁發布服務,郵件訂閱服務,Web網關對外提供訪問服務。
2.2 系統工作流程
基于Scrapy的崗位推薦系統的工作流程如圖3所示。系統啟動時,從PostgreSQL數據庫加載站點元信息。Scrapy通過站點元信息初始化每個站點的Spider,初始化完成后批量啟動爬蟲,爬取URL以及其他相關信息(如:標題,時間,作者等)。系統通過Redis中的Bloom Filter檢查當前URL是否已經被訪問過。如果該URL已經被訪問過,則結束本條信息抓取操作,進入下一輪循環。如果該URL尚未被訪問,則通過Spider Middlewares下載本條URL以及相關信息。最后通過Scrapy Pipeline將數據存入PostgreSQL數據庫。
2.3 系統運行結果分析
爬蟲程序被設置成定時任務,調度器每天調度執行2次,執行完畢后會以郵件的形式發送給訂閱者,主題為“崗位信息發布/崗位數[*]”。用戶點擊郵? 件即可查閱當天發布的崗位信息。
網頁和郵件時間同步,每天早晚發布一次。如果沒有郵件訂閱,用戶也可以自行在網頁上查詢,網頁按時間展示當天更新的信息。本系統目前運行狀況穩定,所有流程均能自動完成,無需人工干預。
3 結語
隨著大數據和人工智能的發展,網絡上的信息呈爆炸式增長。紛繁復雜的信息正充斥著人們的日常生活。快速準確地獲取有效信息,可以大大提高工作效率和生活質量。利用網絡爬蟲,用戶可以按需獲取互聯網上的有效信息,避免海量信息的沖擊。本文介紹了爬蟲框架Scarpy、Redis、布隆過濾器、PostgreSQL數據庫等相關技術,設計并實現了一種基于Scrapy的崗位推薦系統,能夠幫助用戶快速精準地獲取所需要的招聘信息。
參考文獻
[1]胡文濤.一個分布式動態網頁爬蟲系統設計與實現[D].武漢:華中科技大學,2022.
[2]黎玉香,于偉.分布式網絡爬蟲系統的基本原理與實現[J].花炮科技與市場,2018(4):45.
[3]劉澤華,趙文琦,張楠.基于Scrapy技術的分布式爬蟲的設計與優化[J].信息技術與信息化,2018(增刊1):121-126.
[4]劉思林.Scrapy分布式爬蟲搜索引擎[J].電腦知識與技術,2018(34):186-188.
[5]楊本棟.基于網頁信息自動提取的分布式爬蟲系統設計與實現[D].北京:北京郵電大學,2022.
(編輯 何 琳編輯)
Design and implementation of a job recommendation system based on Scrapy
Cao? Pei1, Lin? Yongyi2*
(1.Nanjing Vocational University of Industry Technology, Nanjing 210023, China;
2.Communication University of China Nanjing, Nanjing 211172, China)
Abstract:? The development of big data and artificial intelligence has led to an explosive growth of information on the internet. How to quickly and accurately mine effective information from massive data has become a research hotspot. This article is based on the Scarpy framework and combines Redis, Bloom Filter (BF), and PostgreSQL databases to design and implement a recommendation system based on Scrapy. The system can obtain information from specified URLs, store them in the database, and present them to users in the form of web pages or emails.
Key words: recommendation system; Bloom filter; Scarpy; PostgreSQL