Backend/JAVA_Crawling

03. JAVA를 이용한 네이버 영화 평점 크롤링 (AJAX가 적용된 사이트, 크롤링 결과 파일로 저장하기)

개발개발빈이 2022. 6. 13. 20:57

○ 네이버 영화 평점 크롤링하기

출처 : https://movie.naver.com/movie/bi/mi/point.naver?code=192608

    - 범죄도시2 관람객 평점 크롤링하기

    - 한페이지에 10건씩 총 2404건의 평점, 총 25페이지 크롤링 필요

 

    - AJX로 만들어서, 리뷰 페이지 넘겨도 URL안바뀜 > 소스 분석 필요

AJAX를 적용해서 평점에서 페이지를 이동해도 URL이 변하지 않음

 

○ 네이버 영화 평점 소스 분석

    1) URL 분석

        - 크롬 개발자 도구를 이용해서 <iframe>에 걸려있는 URL로 넘어가니 관람객 리뷰만 있는 페이지로 이동

        - https://movie.naver.com/movie/bi/mi/pointWriteFormList.naver?code=192608 

          1페이지 > https://movie.naver.com/movie/bi/mi/pointWriteFormList.naver?code=164122&page=1
          2페이지 > https://movie.naver.com/movie/bi/mi/pointWriteFormList.naver?code=164122&page=2

<iframe src="/movie/bi/mi/pointWriteFormList.naver
             ?code=192608&type=after&isActualPointWriteExecute=false
             &isMileageSubscriptionAlready=false&isMileageSubscriptionReject=false" 
        id="pointAfterListIframe" name="pointAfterListIframe" width="100%" 
        frameborder="0" scrolling="no" class="ifr" title="네티즌 평점 리스트" 
        height="1345px"></iframe>

    

    2) 요소 분석

        - 리뷰 내용이 들어있는 HTML요소 <span id="_filtered_ment_0"> ~ <span id="_filtered_ment_9"> 

 

for(int ment=0; ment<=9; ment++) {	

    Elements elements=doc.select("#_filtered_ment_"+ment);

    for(Element element : elements) {
        out.println(element.text());
    }//for end

}//for end

 

        - 또는 <div class="score_reple"> 의 내용을 가져온 뒤,

          필요없는 내용을 제거(관람객여부 표시(<span class="ico_viewer"), 아이디, 날짜, 신고버튼(<dl>) 등)

Elements elements=doc.select(".score_reple");
elements.select(".ico_viewer").remove();  //관람객 표시
elements.select("dl").remove();  //<dl> 아이디, 날짜, 신고버튼 등

 

○ 네이버 영화 평점 크롤링 결과 출력

 

    ① 콘솔창

package crawlingPosting;

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

public class Test05_crawling {

	public static void main(String[] args) {

		try {
			
			String movieCode="192608"; //범죄도시2
			int reples = 2404;	//총 리플수
			int pages = (int)(reples/10)+1;	
			
			String URL="https://movie.naver.com/movie/bi/mi/pointWriteFormList.naver";
			
			for(int p=1; p<=pages; p++) {
				String params = "?code=" + movieCode;
				params += "&page=" + p;
				params += "&type=after&onlyActualPointYn=Y";			
				
				Document doc=Jsoup.connect(URL+params).get();
				
				Elements elements=doc.select(".score_reple");
				elements.select(".ico_viewer").remove();
                elements.select("dl").remove();
				
				for(Element element : elements) {
					System.out.println(element.text());
				}//for end
				
			}//for end
			
		} catch (Exception e) {
			System.out.println("크롤링 실패: " + e);
		}//try end
		
	}//main() end

}//class end

 

    ② txt 파일로 출력

        - "범죄도시2" 영화 평점을 관람객만 크롤링한 후 메모장 파일에 저장하기 (TheOutlaws2.txt)

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 Test06_crawling {

	public static void main(String[] args) {
	
		try {
			
			String filename="C:/java202202/TheOutlaws2.txt";
			FileWriter fw= new FileWriter(filename, false);
			PrintWriter out= new PrintWriter(fw, true);
			
			String movieCode="192608"; //범죄도시2
			int reples = 2404;	//총 리플수
			int pages = (int)(reples/10)+1;	
			
			String URL="https://movie.naver.com/movie/bi/mi/pointWriteFormList.naver";
			
			for(int p=1; p<=pages; p++) {
				String params = "?code=" + movieCode;
				params += "&page=" + p;
				params += "&type=after&onlyActualPointYn=Y";
								
				Document doc=Jsoup.connect(URL+params).get();
				
				Elements elements=doc.select(".score_reple");
				elements.select(".ico_viewer").remove();
				elements.select("dl").remove();
                
				for(Element element : elements) {
					out.println(element.text());
				}//for end
				
			}//for end
			
			System.out.println("-----TheOutlaws2.txt 저장 완료");
			
			out.close();
			fw.close();
			
		} catch (Exception e) {
			System.out.println("크롤링 실패: " + e);
		}//try end

	}//main() end

}//class end

텍스트 파일로 저장 완료

 

○ 네이버 영화 평점  크롤링 관련 파라미터

    - 그 외 크롤링 시 사용할 수 있는 파라미터

        ① 관람객 평점만 보기 : &onlyActualPointYn=Y / &onlyActualPointYn=N

        ② 스포일러 보기 : &onlySpoilerPointYn=Y  / &onlySpoilerPointYn=N

        ③ 정렬

            &order=newest : 최신순

            &order=highest : 평점 높은 순

            &order=lowest : 평점 낮은 순

            &order=sympathyScore : 공감순