맥스무비 예매순위 차트


맥스무비(http://www.maxmovie.com/)의 영화 차트에서 영화 제목, 예매율, 개봉일, 포스터 사진url을 가져왔습니다.

노가다하는 방법을 사용해서 가져왔습니다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
    ArrayList<String> htmls = new ArrayList<String>();
    boolean isConnection = false;
    String infoLine = "";
    
    public void getAllHtml(String newUrls) {
        htmls.clear();
        InputStream inputStream;
        URL url = null;
        try {
            url = new URL(newUrls);
            HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
 
            inputStream = new BufferedInputStream(urlConnection.getInputStream());
            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "euc-kr"), 8);
 
            String line = null;
            while ((line = reader.readLine()) != null) {
                if (!line.trim().equals("")) {
                    htmls.add(line.trim());
                }
            }
            inputStream.close();
            isConnection = true;
        } catch (Exception e) {
            isConnection = false;
            System.out.println(e);
        }
    }

cs



HTML 페이지의 모든 내용을 불러오는 메소드입니다.

매개변수를 통해 불러올 url을 넣어줄겁니다.

HTML페이지에서 불러오는 내용들은 htmls라는 변수를 만들어 이 안에 넣어놓을 겁니다.


잘 들어왔나 확인해봅니다.





1
2
3
4
5
public void printHtml() {
        for (String dto : htmls) {
            System.out.println(dto);
        }
    }
cs



1
2
3
4
5
6
7
    public static void main(String[] args) {
        String a = "http://www.maxmovie.com/movie_info/res_chart.asp";
        
        Parse p = new Parse();
        p.getAllHtml(a);
        p.printHtml();
}
cs





htmls변수의 내용들을 출력하는 메소드를 만들었습니다.

실행문을 만들고 불러올 사이트의 url을 getAllHtml 메소드의 매개변수로 넣어줍니다.

출력해보죠.








잘 가져오고 있습니다!

이 많은 내용 중에 제가 원하는 내용만 골라내야합니다. 저는 영화 제목, 예매율, 포스터 url, 개봉일자를 가져올겁니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
//제목 가져오기
    public void getMovieTitle(String msg) { // class='poster'
        for (int i = 0; i < htmls.size(); i++) {
            String ss = htmls.get(i);
            if (ss.contains(msg)) {
                infoLine = ss.trim();
                infoLine = infoLine.substring(infoLine.indexOf("alt='"+ 5).trim();
                infoLine = infoLine.substring(0, infoLine.lastIndexOf("'") ).trim();
                System.out.println(infoLine);
            }
            else {
            }
        }
    }
cs






<td class='poster'><a href='http://www.maxmovie.com/movie_info/detail.asp?m_id=M000099902'><img src='http://image.maxmovie.com/movieinfo/image/poster/movie/z_Max2017FateofFurious.jpg' alt='분노의 질주: 더 익스트림'  /></a></td>


제목이 포함된 행입니다.

매개변수에 찾을 조건을 넣어 htmls로 부터 매개변수로 들어간 문자가 포함된 줄을 자릅니다.

class='poster'를 조건으로 넣으면 되겠네요. alt=' 뒤 부터 영화 제목이 시작되므로 그 뒤부터 홑따옴표가 닫히는 곳 까지 영화 제목을 잘라오도록 합니다.



같은 방식으로 예매율, 개봉일자, 포스터URL을 잘라오도록 합니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
//예매율가져오기
    public void getMovieBook(String msg) { // poiNum'
        for (int i = 0; i < htmls.size(); i++) {
            String ss = htmls.get(i);
            if (ss.contains(msg)) {
                infoLine = ss.trim();
                infoLine = infoLine.substring(infoLine.indexOf(">"+ 1).trim();
                infoLine = infoLine.substring(0, infoLine.indexOf("<")).trim();
                System.out.println(infoLine);
            }
            else {
            }
        }
    }
cs



1
2
3
4
5
6
7
8
9
10
11
12
13
14
//개봉일가져오기
    public void getMovieOpenDate(String msg) { //em>개봉일
        for (int i = 0; i < htmls.size(); i++) {
            String ss = htmls.get(i);
            if (ss.contains(msg)) {
                infoLine = ss.trim();
                infoLine = infoLine.substring(infoLine.lastIndexOf("em>"+ 3).trim();
                infoLine = infoLine.substring(0, infoLine.indexOf("<")).trim();
                System.out.println(infoLine);
            }
            else {
            }
        }
    }
cs



1
2
3
4
5
6
7
8
9
10
11
12
13
14
//포스터(작은그림)
    public void getMovieSPoster(String msg) { //tmpo
        for (int i = 0; i < htmls.size(); i++) {
            String ss = htmls.get(i);
            if (ss.contains(msg)) {
                infoLine = ss.trim();
                infoLine = infoLine.substring(infoLine.indexOf("src="+ 5).trim();
                infoLine = infoLine.substring(0, infoLine.indexOf("\"")).trim();
                System.out.println(infoLine);
            }
            else {
            }
        }
    }
cs



위 메소드들을 이용하여 다시 출력해봅시다!



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    public static void main(String[] args) {
        String a = "http://www.maxmovie.com/movie_info/res_chart.asp";
        String str1 = "class='poster'";
        String str2 = "poiNum";
        String str3 = "em>개봉일";
        String str4 = "tmpo";
        
        Parse p = new Parse();
        p.getAllHtml(a);
        //p.printHtml();
        p.getMovieTitle(str1);
        //p.getMovieBook(str2);
        p.getMovieOpenDate(str3);
        //p.getMovieRank(str4);
        p.getMovieSPoster(str4);
    }
}
cs



출력결과 :






성공적으로 잘라왔습니다.

첫 포스트가 이런 수준이라 좀 부끄럽긴 하지만 아직 제 실력이 미치지 못해서요^^;

읽어주셔서 감사합니다.

+ Recent posts