準備工做:html
從github上download工程。git
安裝VS2017。github
安裝 .net core 2.0。架構
編譯經過。ide
基礎架構:url
調度器 Scheduler 從根site開始,向 Downloader 分配請求任務。spa
Downloader 根據分配到的請求任務,向目標site 下載 page,並交由 PageProcessor 進行頁面處理。.net
PageProcessor 將處理的結果推入 Pipeline,將解析出的新的連接,推入 Scheduler。code
循環直至 Scheduler 沒有新的請求能夠處理。htm
Spider.Create:
設定根訪問節點、惟一身份標識、請求調度器 Scheduler,頁面處理器 PageProcessor。
以給出的 Sample 樣例中,遍歷 cnblog 站點爲例進行解析:
Scheduler 是 QueueDuplicateRemovedScheduler。就是一個存放 Request 的隊列。
PageProcessor 是默認的 DefaultPageProcessor。
這裏涉及到 XPath 的知識,須要快速瞭解。
XPath:XPath 使用路徑表達式在 XML 文檔中進行導航,選取 XML 文檔中的節點或者節點集。
主要知識點見:http://www.runoob.com/xpath/xpath-syntax.html
頁面處理流程 BasePageProcessor.Process:
public void Process(Page page) { bool isTarget = true; if (_targetUrlPatterns.Count > 0 && !_targetUrlPatterns.Contains(null)) { foreach (var regex in _targetUrlPatterns) { isTarget = regex.IsMatch(page.Url); if (isTarget) { break; } } } if (!isTarget) { return; } Handle(page); page.ResultItems.IsSkip = page.ResultItems.Results.Count == 0; if (!page.SkipExtractTargetUrls) { ExtractUrls(page); } }
在 Sample 中,調用的是 DefaultPageProcessor 提供的 hanlde:
page.AddResultItem("title", page.Selectable.XPath("//title").GetValue()); page.AddResultItem("html", page.Content);
默認的頁面處理,是找出 「title」 元素,以及整個 html 內容。
接着在下載好的頁面內容中,查找更多的 url。
因而可知,實現自定義爬蟲的關鍵,則是定義對頁面的處理獲得結果,以及對結果的處理。