본문 바로가기
.Net

.NET - HtmlAgilityPack SelectNodes에서 다중 클래스 찾기 contains

by 올엠 2022. 11. 11.
반응형

요즘 HTML 을 가지고 자동화를 하고자 한다면, HtmlAgilityPack이 .Net에서는 많이 사용된다.

클래스를 찾는 방법으로, 단순한 구조의 html이라면 괜찮지만 조금 복잡하게 여러개의 class가 선언 된 경우 효과적으로 사용할 수 있는 contains에 대해 짧게 정리해 본다.

먼저 HtmlAgilityPack 에서 노드를 찾는 기능은, SelectNodes로 가능하다.

SelectNodes

그리고 기본적으로 검색 방법은 Xpath 방식을 이용하는데, 앞서 구분자 a, div 등 꺽쇠를 제외한 구분자와 내부 검색하고자 하는 Key와 Value를 지정해주면 된다.

기본적으로 아래와 같은 조건으로 사용할 수 있다.

# body가 들어간 노드 찾기
var body = html.DocumentNode.SelectNodes("body")

# td가 들어가 노드 찾기
var body = html.DocumentNode.SelectNodes("td")

그리고 가장 많이 쓰이는 class가 기준으로 찾는다고 하면, div로 검색을 진행하며, 앞에 //는 전체 노드에서 찾는 것을 의미한다. 그리고 조건을 중괄호를 이용하여 @로 Key, Value를 아래와 같이 선언하여 사용이 가능하다.

# 전체 div에서 hello class 노드 찾기
var hello = html.DocumentNode.SelectNodes("//div[@class='hello']")

위에서 찾은 노드는 class가 hello인 것은 찾을 수 있지만, 다중 Class가 선언된 Class들은 찾지 못한다.

여기에 다중 클래스중 포함되는 것을 찾고자 한다면, contains를 사용하면 된다.

# 전체 div에서 hello class 노드 찾기
var hello = html.DocumentNode.SelectNodes("//div[contains(@class, 'hello')]")

실제로 테스트해보면, 1개의 노드를 찾은 것을 알 수 있다.

이러한 방식으로 노드를 찾아 활용하면 된다.

반응형