웹개발 교육/Java

[41일] 크롤링 (4) - 공지사항 제목 크롤링 연습예제

ewok 2022. 9. 23. 15:40

솔데스크 웹페이지에서 공지사항 제목만 크롤링해서 soldesk.txt 파일에 저장하기

https://soldesk.com/board/board_bagic/board_list.asp?scrID=0000000173&pageNum=8&subNum=1&ssubNum=1&page=1&bd_num=&act=list&s_string= 

 

솔데스크

실력과 인품을 겸비한 인재양성 교육기관 - 솔데스크

soldesk.com

 

먼저 URL은 분석해보자

파란색을 표시한 부분의 숫자가 달라진다. 이 부분을 변수로 처리하자

 

package crawling0923;

import java.io.FileWriter;
import java.io.PrintWriter;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class Test05_soldesk {

	public static void main(String[] args) {
		// 연습예제) 솔데스크 웹페이지에서 공지사항 제목만 크롤링해서 soldesk.txt 파일에 저장하기
		
		try {
			
			String fileName = "I:/java202207/soldesk.txt";
			FileWriter fw = new FileWriter(fileName, true);  //(내용)추가 모드
			PrintWriter out = new PrintWriter(fw, true);
			
			String URL = "https://soldesk.com/board/board_bagic/board_list.asp";
			
			
			for (int p=1; p<=8; p++) {
				String params = "?scrID=0000000173&pageNum=8&subNum=1&ssubNum=1&page=" + p + "&bd_num=&act=list&s_string=";
				
				//공지사항 웹페이지 1~8페이지 소스 가져오기
				Document doc = Jsoup.connect(URL+params).get();	
				//System.out.println(doc.toString());
				/*
					공지사항 제목 가져오기
					<td class="td_left">
					
					</td>
				*/
				
				Elements elements = doc.select(".td_left");				
				for (Element element : elements) {					
					System.out.println(element.text());
				}//for end
			}//for end
			
			out.close();
			fw.close();
			System.out.println("------soldesk.txt 공지사항 제목 저장 완성!!");
			
		} catch (Exception e) {
			System.out.println("크롤링 실패 : " + e);
		}//end	

	}//main() end
}//class end

크롤링을 하여 td_left 클래스의 내용을 가져왔다. 하지만 여기서 날짜도 같이 가져왔다. 날짜는 제외하고 제목만 가져오고 싶을 수도 있을 것이다.

 

이제 날짜를 제외한 제목만 가져오도록 해보자

//class="td_m_date" 요소 제거하기
elements.select(".td_m_date").remove();

select()를 사용하여 제거하고자 하는 요소를 선택한 뒤 remove()로 제거할 수 있다.

 

package crawling0923;

import java.io.FileWriter;
import java.io.PrintWriter;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class Test05_soldesk {

	public static void main(String[] args) {
		// 연습예제) 솔데스크 웹페이지에서 공지사항 제목만 크롤링해서 soldesk.txt 파일에 저장하기
		
		try {
			
			String fileName = "I:/java202207/soldesk.txt";
			FileWriter fw = new FileWriter(fileName, true);  //(내용)추가 모드
			PrintWriter out = new PrintWriter(fw, true);
			
			String URL = "https://soldesk.com/board/board_bagic/board_list.asp";
			
			
			for (int p=1; p<=8; p++) {
				String params = "?scrID=0000000173&pageNum=8&subNum=1&ssubNum=1&page=" + p + "&bd_num=&act=list&s_string=";
				
				//공지사항 웹페이지 1~8페이지 소스 가져오기
				Document doc = Jsoup.connect(URL+params).get();	
				//System.out.println(doc.toString());
				/*
					공지사항 제목 가져오기
                    <td class="td_left">
                        <a href="javascript:goDetail('00000001732022000002','bd_num');" title="">
                            <!--모바일에서는 td_m_date에 날짜가 나오게해놨습니다.-->
                            <span class="td_m_date">2022-03-31</span>
                            아마존AWS클라우드 13기 / 자바파이썬빅데이터 3기 모집중
                        </a>
                    </td>
				*/
				
				Elements elements = doc.select(".td_left");		
				
				//class="td_m_date" 요소 제거하기
				elements.select(".td_m_date").remove();
				
				for (Element element : elements) {					
					System.out.println(element.text());
					out.println(element.text());  //soldesk.txt 파일 출력
				}//for end
			}//for end
			
			out.close();
			fw.close();
			System.out.println("------soldesk.txt 공지사항 제목 저장 완성!!");
			
		} catch (Exception e) {
			System.out.println("크롤링 실패 : " + e);
		}//end	

	}//main() end
}//class end