[C#] 使用CSS Selector方式來解析爬蟲Html網頁 by AngleSharp

Parse Html jQuery like CSS/HTML selector in C#

前言

在2010年左右,.net技術如果想parse解析Html網頁,只有Html Agility Pack這個選擇

HtmlAgilityPack由於是以XML角度看待Html,抓取網頁標籤資料使用XPath+Linq的寫法

對於習慣寫前端jQuery的人來說相當不好上手

如今事隔多年,.net解析Html網頁的第三方套件百家爭鳴,在nuget官網上看得我眼花撩亂XD

陸續出現採用CSS Selector的寫法來解析網頁的套件也不少,終於可以在後端使用類似jQuery CSS Selector方式來抓取網頁標籤資料

今天要介紹的一款就是號稱解析效能很好和HtmlAgilityPack有得拼的AngleSharp

實作

從Nuget即可安裝,第一個就是

專案環境必須是.net Framework 4以上,3.5以下的話,從Nuget會安裝失敗

以抓取奇摩電影海報圖為例

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
/*引用命名空間*/
using AngleSharp;
using AngleSharp.Dom;

namespace ConsoleApp2Test
{
    class Program
    {
        static void Main(string[] args)
        { 
            IConfiguration config = Configuration.Default.WithDefaultLoader();
            string url = "https://tw.movies.yahoo.com"; 
            IDocument doc =   BrowsingContext.New(config).OpenAsync(url).Result;
           
            /*CSS Selector寫法*/
            IHtmlCollection<IElement> imgs = doc.QuerySelectorAll("div.movie_foto img:first-child");//取得圖片
            foreach (IElement img in imgs)
            {
                Console.WriteLine(img.GetAttribute("src"));
            }
            Console.ReadKey();
        }
    }
}

執行結果:

個人覺得寫法比起HtmlAgilityPack,要來的簡潔好懂多了

再看看其他官方AngleSharp examples,也支援JavaScript engine

整體而言,真是不錯的套件,後續看好它的發展

參考文章

How to parse HTML in .NET – Pavel Nasovich's Blog

一个犀利的 HTML 解析器 —— Less.Html