728x90
반응형
REST(Reprsentational State Transfer)
- 자원을 이름으로 구분하여 해당 자원의 상태를 주고 받는 모든 것을 의미
- 자원 : 소프트웨어가 관리하는 모든 것(문서, 이미지, 데이터..)
- json, xml을 통해 데이터를 주고 받는 것이 일반적
장점
- HTTP 프로토콜의 인프라를 그대로 사용하므로 REST API 사용을 위한 별도의 인프라를 구축할 필요가 없음
- HTTP 표준 프로토콜에 따른 모든 플랫폼에서 사용이 가능
- 서버와 클라이언트의 역할을 명확하게 분리(프론트엔드 - 백앤드)
단점
- 표준이 존재하지 않음
- 사용할 수 있는 메소드의 형대가 제한적
- 구형 브라우저가 아직 지원하지 않는 부분이 존재할 수 있음
과제
네이버 영화에서 영화제목, 평점, 리뷰를 크롤링 10p 페이지를 DB에 저장
https://movie.naver.com/movie/point/af/list.naver
https://movie.naver.com/movie/point/af/list.naver?&page=1
package com.koreait.crawling;
import java.util.Iterator;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class Crawling1 {
public static void main(String[] args) {
String url ="http://www.cgv.co.kr/movies/";
// System.out.println("접속주소: "+url);
Document doc = null;
try {
doc = Jsoup.connect(url).get();
// System.out.println("접속성공!");
// System.out.println(doc.html());
}catch(Exception e) {
e.printStackTrace();
}
Elements elements = doc.select("div.sect-movie-chart");
Iterator<Element> rank = elements.select("strong.rank").iterator();
Iterator<Element> title = elements.select("strong.title").iterator();
while(rank.hasNext()) {
System.out.println(rank.next().text()+":"+title.next().text());
}
}
}
package com.koreait.crawling;
import java.util.Iterator;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class crawling2 {
public static void main(String[] args) {
String url ="https://music.bugs.co.kr/chart";
Document doc = null;
try {
doc = Jsoup.connect(url).get();
// System.out.println("접속성공!");
// System.out.println(doc.html());
}catch(Exception e) {
e.printStackTrace();
}
Elements elements = doc.select("table.byChart");
Iterator<Element> title = elements.select("p.title").iterator();
Iterator<Element> artist = elements.select("p.artist").iterator();
int rank =1;
while(title.hasNext()) {
System.out.println(rank+"위 "+artist.next().text()+"-"+title.next().text());
rank++;
}
}
}
✔ 네이버 영화 리뷰 10페이지 크롤링 DB저장
/*
SQL 문
use aidev;
create table tb_mv(
m_idx int not null auto_increment primary key,
m_title varchar(50),
m_score int,
m_review varchar(1000)
);
select * from tb_mv;*/
package com.koreait.crawling;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.util.Iterator;
import javax.servlet.http.HttpSession;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import com.koreait.db.Dbconn;
public class Mcrawling {
public static void main(String args[]) {
for(int i=1; i<11; i++) {
String url = "https://movie.naver.com/movie/point/af/list.naver?&page=" +" str(i)";
Document doc = null;
try {
doc = Jsoup.connect(url).get();
}catch(IOException e) {
e.printStackTrace();
}
Elements element = doc.select("table.list_netizen");
Iterator<Element> moviename = element.select("a.movie").iterator();
Iterator<Element> scores = element.select("div.list_netizen_score").iterator();
Iterator<Element> content = element.select(".title").iterator();
int idx=0;
while(moviename.hasNext()) {
String movienames = moviename.next().text();
String scores2=scores.next().text();
scores2=scores2.substring(12);
int score =Integer.parseInt(scores2);
String content2 = content.next().text();
idx = content2.indexOf("중");
content2 = content2.replaceAll("신고", "");
Connection conn = null;
PreparedStatement pstmt = null;
try {
String m_title = movienames;
int m_score = score;
String m_review = content2;
String sql = "insert into tb_mv(m_title, m_score, m_review) values ( ?, ?, ?)";
conn = Dbconn.getConnection();
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, m_title);
pstmt.setInt(2, m_score);
pstmt.setString(3, m_review);
pstmt.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("영화 제목 : "+movienames + "별점 :"+score + "점 리뷰내용 :" + content2);
}
}
}
}
반응형
'JSP' 카테고리의 다른 글
JSP 스팸번호 입력, 출력, 수정, 횟수, 삭제, 검색 쿼리 (0) | 2023.09.30 |
---|---|
JSP (Marven, 파일 업로드, JSTL, el) (0) | 2022.11.29 |
JSP DB 회원가입 게시판 쿼리 (0) | 2022.11.26 |
JSP DB연결 (로그인 및 회원 가입) - MySQL 연결 활용 (0) | 2022.11.21 |
JSP (예외, pagecontext, ajax, XMLHttpRequest) (0) | 2022.11.21 |