https://www.choongang.co.kr/html/sub07_01_n.php
중앙정보처리학원 / 중앙정보기술인재개발원
공식홈페이지,51년역사 JAVA,인공지능,빅데이터,사물인터넷,채용연계 SW기술 무료 취업교육
www.choongang.co.kr
위 사이트의 공지사항에서 제목만 가져와보자
우선 웹페이지의 소스를 가져와야 한다.
package crawling0923;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
public class Test01_choongang {
public static void main(String[] args) {
// 중앙정보처리학원 웹페이지의 공지사항 제목만 크롤링 하기
try {
String URL = "https://www.choongang.co.kr/html/sub07_01_n.php";
//웹페이지 소스 가져오기
Document doc = Jsoup.connect(URL).get();
System.out.println(doc.toString());
} catch (Exception e) {
System.out.println("크롤링 실패 : " + e);
}//end
}//main() end
}//class end
그런데 공지사항에는 1페이지만 있는 것이 아니고 더 많은 페이지들이 있다.
url을 다시 확인해보면 다른 페이지를 열 때마다? 뒤의 page=숫자에서 숫자 부분이 바뀐다. 이를 미루어 보아 숫자 부분은 공지사항의 페이지 번호를 의미하는 것을 알 수 있다.
공지사항이 1 ~ 11페이지까지 있기 때문에 1 ~ 11 웹페이지 소스를 가져와야 한다.
분홍색 박스 부분(전달값)은 계속 변경되기 때문에 연두색 박스 부분과 분홍색 박스 부분은 분리해서 작업하도록 한다.
package crawling0923;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
public class Test02_choongang {
public static void main(String[] args) {
// 중앙정보처리학원 웹페이지의 공지사항 제목만 크롤링 하기
try {
String URL = "https://www.choongang.co.kr/html/sub07_01_n.php";
//공지사항 웹페이지 1~11 페이지 소스 가져오기
for(int p=1; p<=11; p++) {
String params = "?page=" + p + "&mod=&idx=";
//System.out.println(params);
Document doc = Jsoup.connect(URL+params).get();
System.out.println(doc.toString());
}//for end
} catch (Exception e) {
System.out.println("크롤링 실패 : " + e);
}//end
}//main() end
}//class end
page=숫자에서 숫자 부분은 p로 변수 처리하여 반복문을 통해 1 ~ 11까지 params에 담아 초록색 박스에 해당하는 URL과 분홍색 박스에 해당하는 params를 문자열 연산을 통해 합하여 공지사항 1 ~ 11 페이지까지의 소스를 가져왔다.
이제 제목에 해당하는 html의 요소를 선택해보자
개발자 도구를 통해 제목을 보면 제목이 'default_title'이라는 class에 속해 있는 것을 확인할 수 있다. 따라서 .default_title 을 가져오도록 하면 된다.
package crawling0923;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class Test03_choongang {
public static void main(String[] args) {
// 중앙정보처리학원 웹페이지의 공지사항 제목만 크롤링 하기
try {
String URL = "https://www.choongang.co.kr/html/sub07_01_n.php";
//공지사항 웹페이지 1~11 페이지 소스 가져오기
for(int p=1; p<=11; p++) {
String params = "?page=" + p + "&mod=&idx=";
//System.out.println(params);
Document doc = Jsoup.connect(URL+params).get();
//System.out.println(doc.toString());
//요소 선택하기
/*
<td class="default_title"><a href="javascript:goDetail('156','','');">[22.10.08 개강][청년친화형 기업ESG 지원사업] AI 산업이해 일 · 경험 직무체험 교육</a></td>
*/
Elements elements = doc.select(".default_title");
for (Element element : elements) { //for(개별:덩어리)
System.out.println(element.text());
}//for end
}//for end
} catch (Exception e) {
System.out.println("크롤링 실패 : " + e);
}//end
}//main() end
}//class end
for(개별:덩어리)는 elements 변수(덩어리)에 들어있는 .default_title에서 하나씩 element(개별)에 담아준다.
'웹개발 교육 > Java' 카테고리의 다른 글
[41일] 크롤링 (4) - 공지사항 제목 크롤링 연습예제 (0) | 2022.09.23 |
---|---|
[41일] 크롤링 (3) - 크롤링 결과 파일에 저장 (0) | 2022.09.23 |
[41일] 크롤링 (1) - 개요 및 jsoup 라이브러리 설치 (0) | 2022.09.23 |
[40일] JDBC (14) - 페이징 (0) | 2022.09.22 |
[40일] JDBC (13) - 연습 문제 (0) | 2022.09.22 |