Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 반려견
- 반려견 열사병
- 반려견 종류
- 반려견 홀리스틱
- 반려견 유기농
- 홀리스틱 유기농
- 샤로수길 맛집
- 강아지 더위
- 반려견 유기농 사료
- 강아지 열사병
- 강아지 홀리스틱
- 샤로수길 데이트
- 티켓팅메크로
- 자동화봇
- 강아지 종류
- 쿠팡메크로
- 반려견 사료등급
- 강아지 유기농 사료
- 강아지종류
- 신포동 맛집
- 쿠팡매크로
- 강아지
- 동인천 맛집
- 티켓팅매크로
- 국비지원 예습
- 부산 맛집
- 서울대입구 맛집
- 강아지 유기농
- 반려견 더위
- 닥스훈트
Archives
- Today
- Total
심심한잉여의 잡동사니
[JAVA/크롤링]Jsoup을 이용한 Java 크롤링 본문
반응형
라이브러리 다운로드는 위 링크를 통해 받아 라이브러리에 등록
private static testDao dao = new testDao();
public static int insert() {
List<testAddrModel> list = new ArrayList<>();
int page = 1;
int perPage = 100;
String query = "서울+쑥고개로";
String url1 = "https://www.juso.go.kr/support/AddressMainSearch.do?currentPage=";
String url2 = "&countPerPage=";
String url3 = "&searchType=HSTRY&searchKeyword="+query+"&firstSort=none&ablYn=N&synnYn=null";
// 도로명 주소 링크 조합 토탈 값을 크롤링하기 위해 최소 값으로 입력
String totalUrl = url1+1+url2+1+url3;
String allUrl = null;
int total = 0;
try {
//url을 조합하여 connection
Connection conn = Jsoup.connect(totalUrl);
// connection 된 페이지의 코드 가져오기
Document html = conn.get();
// 가져온 코드에서 토탈이 있는 class 찾기
Elements totalEls = html.getElementsByClass("count");
// 해당 클래스는 1개이기에 0번째 인덱스 값에 있는 객체 가져오기
Element el = totalEls.get(0);
// 가져온 값을 .text() 메소드를 통해 값 추출 및 ,를 replace 및 parseInt해주어 int로 변환
total = Integer.parseInt(el.text().replaceAll("\\,",""));
// 총 페이지 구하기
page = total/perPage;
if(total%perPage != 0) {
page += 1;
}
//구한 총 페이지 갯수에 맞춰 url를 수정해 모든 페이지 조회하는 for문 돌리기
for(int i = 0; i<page; i++) {
allUrl = url1 +(i+1)+ url2 + perPage + url3;
Connection connAll = Jsoup.connect(allUrl);
Document htmlAll = connAll.get();
// 값이 있는 클래스 가져오기
Elements elsAll = htmlAll.getElementsByClass("row");
// 가져온 클래스를 순회하여 모든 row값 조회하기
for(Element elAll : elsAll) {
// id값 크롤링
String docId = elAll.getElementsByClass("num").get(0).text();
// 도로명주소 값 크롤링
String addr1 = elAll.getElementsByClass("roadNameText").get(0).text();
// 값을 담을 모델 생성
testAddrModel model = new testAddrModel();
//set을 통해 값 넣기
model.setDocId(docId);
model.setAddr1(addr1);
//리스트에 담기
list.add(model);
}
}
} catch (Exception e) {
e.printStackTrace();
}
// 리스트 반환
return dao.insert(list);
}
위 코드와 같이 도로명 주소를 가져오는 예제를 작성해보았다.
해당 페이지는 class로만 이뤄져있고 id값은 없어 다소 귀찮은 부분이 있었으나 그럼에도 불구하고 위 코드와 같이 간단히 작성이 가능하다.
jsoup 라이브러리를 사용하면 간단하게 사용이 가능 할 것으로 보인다.
반응형
'코딩일기 > Java' 카테고리의 다른 글
[JAVA/셀레니움]JAVA로 셀레니움 다루기 (0) | 2023.08.22 |
---|---|
[JAVA] 스트림(Stream) 정리 (0) | 2022.09.20 |
[Java] 자바 컬렉션(Collection) 구조 정리 (0) | 2022.05.02 |
[JAVA] 어노테이션(Anotation) (0) | 2022.04.12 |
[Java] 리플렉션 Class 클래스 (0) | 2022.04.11 |