본문 바로가기
JSP

크롤링 (네이버 영화 리뷰 및 DB저장)

by code2772 2022. 12. 4.

[ 목차 ]

    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);
    
                }
    
            }
        }
    }

     

     

    반응형