반응형
요즘 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개의 노드를 찾은 것을 알 수 있다.
이러한 방식으로 노드를 찾아 활용하면 된다.
반응형
'.Net' 카테고리의 다른 글
MVC - MYSQL, 최대 길이가 ‘250’인 문자열 또는 배열 형식이어야 합니다. (0) | 2024.02.20 |
---|---|
MVC/.NET - 조건에 따라 다른 CSS를 보여주고자 할 때 (0) | 2024.02.19 |
.NET - MySqlCommand'Character set 'utf8mb3' is not supported by .Net Framework.' 오류 해결 (0) | 2022.11.11 |
.NET - MAUI 6.0 서비스 배포 (0) | 2022.10.14 |
MySQL - 해결 mysql_native_password failed with message (0) | 2022.09.29 |