Golang搭建並行版爬蟲資訊採集框架!
1.簡介
Go語言在分散式系統領域有著更高的開發效率,提供了海量並行的支援。本博文介紹的是採用Go語言搭建一個並行版爬蟲資訊採集框架,博文中使用58同城中租房網頁做案例。相比較其他爬蟲程式它的優點是:
- 1.抓取資訊速度非常快,因為是並行處理的,通過配置協程數量,可以比普通的爬蟲資訊採集程式快上上百倍。
- 2.功能模組化,每個功能模組各司其職,配置簡單。通過修改資訊抓取規則,就可以採集不同網站中的資料。
程式原始碼放到github上,連結地址是: https://github.com/GuoZhaoran/crawler
2.專案架構
下面是專案整體架構的示意圖:
2.1 Request(請求)
該爬蟲架構中Request請求可以理解為:抓取請求url的內容,例如抓取58同城北京市的租房資訊時,請求的url是: https://bj.58.com/chuzu/
開啟url會發現,網頁頁面中是房源列表資訊,那麼接下來要做的工作就是抓取房源詳情資訊和分頁後的下一頁房源列表資訊。於是就會有新的請求Request,對應不同的url連結地址。
進群:960410445 即可獲取數十套PDF!
2.2 Worker(工作者)
我們在拿到Request請求之後,抓取到網頁頁面內容,就需要有單獨的程式去解析頁面,提取相關資訊,這就是worker所要做的工作。
2.3 Request佇列和Worker佇列
Go語言在構建並行處理程式中有著天然的優勢,在該框架中處理Request請求和使用Worker提取相關資訊也都是並行工作的。程式中會同時存在著很多個Request,也會有很多個Worker在處理不同Request頁面中的內容。所以分別需要一個Request佇列和Worker佇列來管理它們。
2.4 Scheduler(排程器)
排程器的職責是將Request分配給空閒的Worker來處理,實現任務排程。因為Request和Worker分別使用佇列進行管理,可以通過排程器來控制程式的執行過程,例如:分配不同數量的Worker,將特定的Request分配給相應的Worker進行處理等。