dotNetSpider 手記

準備工做: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。

 

  因而可知,實現自定義爬蟲的關鍵,則是定義對頁面的處理獲得結果,以及對結果的處理。

相關文章
相關標籤/搜索