好康道相報
※加入部落軌道,讓你的部落格有更多人知道 《按此加入》《使用心得
※欲轉貼本站文章者,只要註明出處及網址即可,不需我同意了,謝謝您的配合
※留悄悄話的網友請注意:如果您非痞客邦會員(包含使用FB/Google+帳號),是看不到回覆的喔
※痞客邦會自動將疑似廣告留言隱藏,因此若留言後看不到,可能是被系統自動隱藏了,由於我現在很久才會開一次網誌,有看到時我才會將非廣告留言解開,敬請見諒

YahooNewsParser_1

這是半個月前幫學弟寫的程式(順便學習一下HttpParser跟Config的用法)
主要功能就是把Yahoo新聞的新聞網頁的內容給抓下來存成txt檔
如此一來要做資訊檢索或斷詞之類的研究都很方便
或許有人會說:用RSS不就好了?
我會額外寫個小程式的原因有二,一是RSS不一定能顯示很久以前的資訊,二是自訂性
自製程式的話對於格式或檔名之類的設定都可以按造自己需求
還可以過濾掉已存在的新聞...等

按此下載 (51.7kb,需要.NET Framework 2.0)
原始碼(請不要二次散布,謝謝)
順便一提,這也是我第一次使用C#而非VB寫這種小程式

使用方式:
先選擇新聞種類,再選擇讀取範圍、儲存位置
按下[開始]後,程式就會將這些頁數底下的新聞連結都一一下載到指定目錄
另外可以設定儲存的格式

 

這個技術上其實很簡單,主要就是下載指定的Html再讀取需要的欄位資訊
我用的是HTML Agility Pack,這是一個.NET中相當好用的HTML Parser
讀取網頁後可以直接用指定tag的方式取得網頁內容,還可以設定是否要濾掉script及tag
ComicShelf之類的線上看漫畫軟體,其實也都是用同樣的方式去取得圖片的
美中不足的是由於指定tag的方式其實是絕對路徑(比方說指定id="xxx"的tag)
所以只要網頁有變動就得重新指定
這就是一堆免空下載跟看漫畫程式必須一直更新解析器的原因

下載(點選Download)
詳細說明

 

順便一提,大致上的用法是這樣,有需要可以參考看看

WebClient client = new WebClient();

using (MemoryStream ms = new MemoryStream(client.DownloadData(url)))
{
    HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
    doc.Load(ms, Encoding.UTF8);

    // 取得所有符合條件的nodes
    HtmlNodeCollection nodes = doc.DocumentNode.SelectNodes("//ul[@class='yom-list-wide thumbnail']//h4//a");
    foreach (HtmlNode node in nodes) {
        // 中略
    }

    // 取得符合條件的第一個node的內部文字
    string title = doc.DocumentNode.SelectSingleNode("//h1[@class='headline']").InnerText;
}
, ,

蕭雲 發表在 痞客邦 PIXNET 留言(4) 人氣()


留言列表 (4)

發表留言
  • 易昇
  • 學長超強!!!!
  • 我也只是把套件兜一兜而已...

    蕭雲 於 2012/08/23 10:13 回覆

  • 悄悄話
  • 悄悄話
  • 王竣瑋
  • 這個exe真的太棒了
    大大地幫助了我的專題
    非常非常感謝你!!
    如果大大方便
    希望能附上視窗程式專案原始碼
    我們會在專案成果的名單上加上作者你的大名與網址
  • 已經附在原文上了
    可以的話,請不要進行二次散布,謝謝

    蕭雲 於 2016/09/16 20:12 回覆

【 X 關閉 】

【PIXNET 痞客邦】國外旅遊調查
您是我們挑選到的讀者!

填完問卷將有機會獲得心動好禮哦(注意:關閉此視窗將不再出現)

立即填寫取消