웹 크롤링을 진행하여 JAVA에서 DB에 데이터를 전달하기 위해서는
외부. jar파일인 Jsoup 파일이 필요하다.
버전에 맞는 Jsoup.jar 파일을 프로젝트의 properties -> Java build path에 추가해준다.
이후 Jsoup의 connect() 메서드를 이용하여 원하는 웹사이트에 연결한 후 get() 메서드로
데이터를 받아들인다. 이때 get 메서드의 리턴 값이 Document 이기 때문에
Document 객체를 만들어 정보를 담아준다.
final String imgUrl = "http://www.cgv.co.kr/movies/?lt=1&ft=0";
// 불러오고 싶은 사이트의 url
Document doc = null; // Document 객체 생성
try {
doc = Jsoup.connect(imgUrl).get();
// doc에 원하는 사이트의 정보를 담음
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
이후 Document 클래스의 select() 메서드를 이용하여 원하는 정보를 doc객체에 골라 담는다.
이때 select 메서드의 반환 타임은 Element이기 때문에 Elements 객체를 만들어 담아준다.
String title = "strong.title"; // 영화 이름
Elements eles1 = doc.select(title);
String percent = "strong.percent"; // 예매율
Elements eles2 = doc.select(percent);
String img = ".thumb-image > img"; // 포스터
Elements eles3 = doc.select(img);
골라 담은 정보들을 하나씩 나눠주기 위해 컬렉션 프레임워크 Iterator를 이용한다.
Iterator 클래스의 iterator() 메서드를 이용하여 골라 담은 정보들을 다시 나눠준다.
Iterator<Element> itr1 = eles1.iterator(); // 영화 제목
Iterator<Element> itr2 = eles2.iterator(); // 예매율
Iterator<Element> itr3 = eles3.iterator(); // 포스터
불러들인 데이터들을 객체에 담아 DB에 넣어준다.
사진 파일의 경우 URL클래스의 객체를 만들어 원하는 사이트의 URL을 넣어준다.
이후 url객체의 openStream 메서드를 이용하여 InputStream 객체를 만들어 정보를 담아주고
OutputStream 클래스의 객체를 만들어 파일이 저장될 공간을 지정해준다.
이후 InputStream의 read() 메서드를 이용하여 정보를 읽어 들이고
OutputStream 객체의 write() 메서드를 이용하여 읽어 들인 정보를 파일로 만들어준다.
package test;
public class Test {
public static void main(String[] args) {
int N = 1; // png 파일에 붙을 숫자
URL url = null; // URL 객체 생성
InputStream in = null; // InputStream 객체 생성
OutputStream out = null; // OutputStream 객체 생성
while(itr3.hasNext()) { // itr3의 정보를 모두 실행할때까지 반복
try {
String s = itr3.next().attr("src"); // 원하는 URL 주소(포스터)
// attr() itr3으로 불러들인 정보의 속성값을 반환
url = new URL(s); //
in = url.openStream(); // in 객체에 url 정보를 담음
out = new FileOutputStream("D:\\0607Park\\포스터\\"+N+".png");
// 저장을 원하는 주소 입력(저장경로)
N++; // 반복문이 진행될때 마다 증가
while(true) {
int data = in.read();
// 담겨진 정보를 읽어 data에 담음
if(data==-1) {
// 데이터값이 -1(더이상 읽을수 없을때)이 되면 종료
break;
}
out.write(data);
// 읽어들인 data정보를 지정한 장소에 저장
}
in.close(); // 저장이 끝난후 사용한 객체는 close
out.close();
String a = itr1.next().text(); // 영화 제목(타이틀)
String b = itr2.next().text(); // 예매율
System.out.println(a);
System.out.println(s);
System.out.println(b);
System.out.println();
CgvVO vo = new CgvVO(); // 객체에 읽어들인 정보를 넣어줌
vo.setTitle(a);
vo.setImg(s);
vo.setBooking(b);
CgvDAO cDAO = new CgvDAO();
cDAO.insert(vo); // 만들어둔 insert 메서드로 DB에 정보 저장
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
'Java > study' 카테고리의 다른 글
웹 크롤링해서 CGV 상영 영화 정보 DB에 넣기 (0) | 2022.07.17 |
---|---|
SQL을 활용하여 MVC 응용 (0) | 2022.07.14 |
MVC 모델을 이용한 자판기 프로그램 (0) | 2022.07.13 |
PrepareStatement 이용하기 (0) | 2022.07.05 |
JAVA에 DB연동하기 (0) | 2022.07.04 |