C# 爬蟲抓取網頁資料

C# 如何抓取網頁資料

前言

當初要看新聞都需要去他們的官網網頁看新聞資料,而且只能看一家新聞的報導,靈機一動就想用爬蟲一次抓取多家新聞的資料,就可以看多家媒體的新聞報導。

 

流程圖

流程

C# 程式編成

抓取各家新聞的網頁資料

顯示畫面

前置作業

引入net和HtmlAgilityPack 程式庫

了解xml格式

參考:https://zh.wikipedia.org/wiki/XPath

程式

static void Main(string[] args)
{
            try
            {
                HtmlWeb webClient = new HtmlWeb(); //建立htmlweb
                //處理C# 連線 HTTPS 網站發生驗證失敗導致基礎連接已關閉
                ServicePointManager.SecurityProtocol =SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls |
                SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
                HtmlDocument doc = webClient.Load("https://www.chinatimes.com/newspapers/2601?chdtv"); //載入網址資料
                HtmlNodeCollection list = doc.DocumentNode.SelectNodes("/html/body/div[2]/div/div[2]/div/section/ul/li"); //抓取Xpath資料
                HtmlDocument appledoc = webClient.Load("https://tw.appledaily.com/new/realtime"); //載入網址資料
                HtmlNodeCollection applelist = appledoc.DocumentNode.SelectNodes("//*[@id='maincontent']/div[2]/div[3]/ul/li"); //抓取Xpath資料
                HtmlDocument linedoc = webClient.Load("https://today.line.me/TW/pc/main/100259");  //載入網址資料
                HtmlNodeCollection linelist = linedoc.DocumentNode.SelectNodes("//*[@id='left_area']/div[3]/ul[1]/li"); //抓取Xpath資料
                Console.WriteLine("中國時報");
                for(int i=0;i<3;i++)
                {
                   string time = list[i].SelectSingleNode("div/div/div[2]/div/time/span[1]").InnerText;
                       string date = list[i].SelectSingleNode("div/div/div[2]/div/time/span[2]").InnerText;
                     Console.WriteLine("標題:" + list[i].SelectSingleNode("div/div/div[2]/h3").InnerText);
                    Console.WriteLine(time+" "+date);
                }
                Console.WriteLine("蘋果日報");
                for (int i = 0; i < 3; i++)
                {
                    string time = applelist[i].SelectSingleNode("a/time").InnerText;
                    string h2 = applelist[i].SelectSingleNode("a/h2").InnerText;
                    string h1 = applelist[i].SelectSingleNode("a/h1").InnerText;
                    Console.WriteLine(h1);
                    Console.WriteLine(time);
                }
                Console.WriteLine("LineToday");
                for (int i = 0; i < 4; i++)
                {
                    string h1 = linelist[i].SelectSingleNode("a/div/p").InnerText;
                    string h2 = linelist[i].SelectSingleNode("a/div/span").InnerText;
                    Console.WriteLine(h1);
                    Console.WriteLine(h2);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("ERROR=" + ex.ToString());
            }
            Console.ReadLine();
}

Result

結語

我們學到了如何利用C#爬蟲程式抓取網頁資料,整理成自己想看的資料。