使用c#製作網路爬蟲,檢查網站可訪問性

來源:互聯網
上載者:User

  前幾天自己負責的網站出現了不能訪問的問題,系統監控程式通過警示將這一資訊告訴了管理員。管理員找到了我,告訴我網站不能正常訪問。後來問題查明,是負載平衡器出了問題。自己在檢查網站的時候,發現有些圖片不能正確顯示,原因是圖片連結無效。

  後來我就在總結這次故障,監控程式只能檢測幾個配置的連結,不可能對整個網站所有連結進行檢測,不然設定檔要寫一大堆。如果是配置外的連結不能訪問,那不是就沒有辦法告知管理員了嗎,況且現在的監控程式也不能檢查頁面圖片能否正常顯示。如果每次都要人工去檢查,那是相當不現實的,那我能不能寫個小程式去實現自動檢查,並把檢查結果已郵件的形式發送給相關人員呢?於是我想到了,可以使用網路爬蟲幹這件事情,當然這個爬蟲是定製版的,只爬當前網站。

  首先建立一個控制台程式(其他類型的工程也可以),命名為WebResourceInspector。

  建立三個檔案:Inspector.cs,EmailHelper.cs,config.xml。結果如下:

  其中Inspector.cs是監控類,裡面利用HttpWebRequest實現資料爬取,分析。EmailHelper.cs是郵件協助類,發送郵件。config.xml是爬取網站的設定檔。還有很多配置資訊是寫在app.config裡面的。

  工程裡面用到兩個dll,一個是log4net,這個是記錄日誌的,不多說了,大家可以去網上找到很多相關文章。另一個是HtmlAgilityPack,他用來解析你爬取的html資料,相當的強大,你可以把整個html作為dom來操作,使用xpath擷取link和img的資訊。

  程式實現原理:

  通過HttpWebRequest,HttpWebResponse擷取首頁的html資訊,通過HtmlAgilityPack結合xpath擷取到所有的a標籤和圖片。把所有的連結和圖片地址放到待檢查隊列unVisitedPageUrlList中。放入之前要檢查當前連結是否已經檢查過。只有已當前網站網域名稱開頭的連結才做頁面html的進一步爬取,擷取下面頁面的連結資訊並放入待檢查隊列。以此類推,直到網站內所有連結都檢查完畢。非本站網域名稱開頭連結只做可訪問性判斷。程式裡我使用了多線程,以提高運行效率。線程數在設定檔裡配置。把所有的錯誤記錄日誌,最後發送郵件,通知管理員。

  

  代碼我貼出來了,有興趣的人可以下載後查看原始碼。:WebResourceInspector.zip

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.