본문 바로가기
프로그래밍/Java

Jsoup Elements 정렬(Comparator)

by Mr-후 2019. 1. 30.
반응형

Jsoup Elements 정렬(Comparator)


오늘 특정 페이지를 크롤링하다 보니 스크래핑 해야할 부분에 노드가 뒤죽박죽 섞여있어 순차적으로 파싱을 하는데 문제가 있다는걸 해가 다 떨어졌을 때 알게 되었다. 

헉, 다시 다 짜야하는건가? 하고 고민을 잠시 하다, 

스크래핑 시작 전에 Elements로 반환된 Nodes를 정렬을 해서 항목 노드의 이름이 같은것끼리 모아야겠다는 생각을 하게되었고 인터넷에 찾아 보니 예제가 있어서 응용해서 해보니 비교적 쉽게 정렬이 되었다. 

어려운 소스는 아니지만 자바에 익숙하지 않아서 ^^ 

오늘 포스팅은 짧지만 유용한 자바의 Collections.sort를 이용해서 Elements의 정렬을 바꾸는 소스 코드다. 




Elements nodes = doc.select("#tab01 .board_list2 tbody tr");


Collections.sort(nodes, new Comparator<Element>() {

@Override

public int compare(Element e1, Element e2) {

logger.info(">> e1.children.first = "+ e1.children().first().text());

return e1.children().first().text().compareTo(e2.children().first().text());

}

});


이런 유용한 소스는 잘 가지고 있어야 한다. ㅎㅎㅎ 

불특정하다는 말은 다음과 같다. 


<tr>
<td>홍길동</td>
<td>전투력 A</td>
</tr>
<tr>
<td>홍길동</td>
<td>전투력B</td>
</tr>
<tr>
<td>슈퍼맨</td>
<td>전투력++</td>
</tr>
<tr>
<td>홍길동</td>
<td>전투력C</td>
</tr> 

Loop를 돌면서 '홍길동' 정보만 A,B,C를 모아서 처리를 하고 슈퍼맨을 처리하고... 이런식이 되어야 하는데 중간에 슈퍼맨이 끼어 있는 바람에 소스 코드가 엄청 복잡해질 수 있는 부분이 있어 깔끔하게 같은 이름으로 정렬을 한 다음 Loop를 돌리는 방식을 선택한 것이다. 


별건 아니지만 ^^ 


반응형