본문 바로가기
.Net

.NET - HTML 특정 문자열 추출, DocumentNode.SelectNodes 검색하기

by 올엠 2022. 4. 5.
반응형

HTML에서 원하는 값을 가져오고 싶을때, 보통 class로 지정된 CSS기준으로 가져올 수 있다.

만약 아래와 같이 Github의 특정 문자열을 가져오고 싶다면, 브라우저의 개발자 도구(F12키) 열어서, Elements 에서 해당하는 스타일을 검색한다. 그리고 아래 그림처럼 왼쪽 말풍선에 나온 내용 참고하여, CSS 구문을 포함해서 SelectNodes 값을 지정해주면 된다.

 

위 div아래와 같이 코드를 작성해서 가져올 수 있다.

using HtmlAgilityPack;
using System;
using System.Net.Http;
using System.Threading.Tasks;

namespace console_html
{
    class Program
    {
        static async Task Main(string[] args)
        {
            HttpClient client = new HttpClient();

            var content = await client.GetStringAsync("https://github.com/samuelclay/NewsBlur/commits/master/ansible");
            var htmlDoc = new HtmlDocument();
            htmlDoc.LoadHtml(content);
            var select_nodes = htmlDoc.DocumentNode.SelectNodes("//div[@class='file-navigation']");
            foreach (var select_item in select_nodes)
            {
                Console.WriteLine(select_item.InnerText);
            }
        }
    }
}

 

SelectNodes를 이용할 때 복잡한 class는 인식이 되지 않는다. 정확히 확인할 필요는 있지만, class를 나누어주는 단위중에 시작 기준 값으로 가져올 수 있기 때문으로 판단된다.

따라서 만약 정확한 class를 찾아주지 못하는 경우에는 html 요소인 tr, td, li과 같은 표준 요소들을 이용해서 값을 가지고 온 후에 처리하는 방식을 추천한다.

 

var select_nodes = htmlDoc.DocumentNode.SelectNodes("//li");
반응형