C#實現百度網站收錄和排名查詢功能思路及實例
一、前言
偶然一次在vs2012默認的項目文件夾裏發現了以前自己做的一個關於SEO的類庫,主要是用來查詢某個網址的收錄次數還有網站的排行數,後來重構了下,今天拿出來寫篇文章,說說自己是如何思考的並完成的。
二、問題描述
首先需要考慮的是能夠支持哪些搜索引擎的查詢,首先是百度,然後是必應、搜狗、搜搜、360。本來想支持Google但是一想不對,根本不好訪問的,所以暫時不算在內。而我們實際要做的就是根據一個網址能夠檢索出這個網址的在各個搜索引擎的收錄次數以及在不同關鍵詞下的網址排行,這裏出入的只有網址還有若幹的關鍵詞,而輸出則是該網址在不同搜索引擎下的收錄次數以及在各個關鍵詞下的排行數。
但是這裏有個問題,就是排行數,如果檢索的網址在前100還好,如果排名很後面,那麽問題就來了,那樣會讓用戶等待很長時間才能看到結果,但是用戶可能只想知道排行前100的具體排名,而那些超過的則只要顯示100以後就可以了,而這些就需要我們前期考慮好,這樣後面的程序才好做。
三、解決思路
相信很多人都能夠想到,就是利用WebClient將將需要的頁面下載下來,然後用正則從中獲取我們感興趣的部分,然後利用程序去處理。而關鍵難度就是在這個正則的編寫,首先我們先從簡單的開始。
四、收錄次數
首先是網站的收錄次數,我們可以在百度中輸入site:www.cnblogs.com/然後我們就可以看到如下的頁面:
而我們所需要的收錄次數就是 5,280,000 這段數字,我們接著查看頁面元素:
接著我們再觀察其他的搜索引擎可以發現都是類似的,所以我們的思路這個時候應該就得出了,最後就是如何組織網址,這部分我們看地址欄?wd=site%3Awww.cnblogs.com%2F這段就知道怎麽寫了。
稍等這個時候我們可能心急一個一個實現,這樣後面我們就沒法集中的調用,同時也會影響以後的新增,所以我們要規定一個要實現收錄數功能的抽象類,這樣就能夠在不知曉具體實現的情況統一使用,並且還能夠在以後輕松的新增新的搜索引擎,而這種方式屬於策略模式(Stategry),下面我們來慢慢分析出這個抽象類的具體內容。
首先每個實現這個抽象類的具體類都應該是對應某個搜索引擎,那麽就需要有一個基本網址,同時還要留下占位符,比如根據上面百度的這個我們就得出這樣一個字符串
http://www.baidu.com/s?wd=site%3A{0}
其中{0}就是為真正需要檢索網址的占位符,獲取下載頁面的路徑是所有具體類都需要的所以我們直接將實現放在抽象類中,比如下面的代碼:
代碼如下:
/// <summary>
/// 服務提供者
/// </summary>
protected String SearchProvider { get; set; }
/// <summary>
/// 需要檢索的網址
/// </summary>
protected String SiteUrl { get; set; }
/// <summary>
/// 搜索服務提供網址
/// </summary>
protected String BaseUrl { get; set; }
/// <summary>
/// 後頁面網址
/// </summary>
/// <param name=”site”>需要查詢的網址</param>
/// <returns>拼接後的網址</returns>
protected String GetDownUrl(string site)
{
return string.Format(BaseUrl, HttpUtility.UrlEncode(site));
}
C#實現百度網站收錄和排名查詢功能思路及實例
本文地址: http://www.paobuke.com/develop/c-develop/pbk23153.html
相關內容
C#中如何利用正則表達式判斷字符C#中將DataTable轉換成CSV文件的方法C#數據結構之隊列(Quene)實例詳解C#定制Excel界面並實現與數據庫交互的方法C#超實用代碼段合集理解C#中的枚舉(簡明易懂)C#中this的使用實例分析c#?DXML?a?????t3?′í?a??·?·¨
C#實現百度網站收錄和排名查詢功能思路及實例