★ 아직 많이 부족합니다. 댓글을 통한 가르침 환영입니다. ★

 

이번에는 Python을 활용하여 네이버 영화순위를 크롤링해오도록 하겠습니다.

 

제가 분석할 URL은 http://movie.naver.com/movie/sdb/rank/rmovie.nhn 입니다.

 

HTML을 가져와 분석하기 위해, BeautifulSoup4를 활용하겠습니다.

 

 

들어가기 앞서, 제 개발환경은

 

[ Windows 10 64-bit, Python 3.5.4, IDE : Pycharm ]

 

[Anaconda3]를 활용하고 있습니다.

 

자, 그럼

 

가장 먼저, BeautifulSoup4을 설치해보도록 하죠.

 

pip install BeautifulSoup4 

 

 

다음은, URL의 정보를 가져오기 위해 코드를 작성해봅시다.

 

BeautifulSoup을 활용할 경우 코드가 정말 간단히 작성됩니다.

 

1
2
from bs4 import BeautifulSoup
import urllib.request
cs

 

이렇게 두 라이브러리를 import 해줍니다.

 

1
html = urllib.request.urlopen('http://movie.naver.com/movie/sdb/rank/rmovie.nhn')
cs

 

이렇게 URL을 통해 가져온 html 데이터를 BeautifulSoup4를 활용하여 분석하도록 하겠습니다.

 

1
soup = BeautifulSoup(html, 'lxml')
cs

 

여기서, 혹시 에러가 발생한다면

 

pip install lxml 

 

을 설치해주도록 합니다. 다음,

 

1
print (soup)
cs

 

을 통해 출력을 해보면, 네이버 영화 순위 사이트에 해당하는 HTML 데이터가 출력되는 것을 확인할 수 있습니다.

 

사이트 진입 후, F12 개발자도구를 열어 확인할 수 있는 데이터입니다.


그럼 이 URL을 본격적으로 분석해보도록 하겠습니다.

 

1
titles = soup.find_all('td''title')
cs

 

먼저, 각 순위에 해당하는 모든 영화 정보를 titles에 담아옵니다.

 

이렇게 코드를 작성한 이유는,

 

 

 

F12 개발자도구를 확인하여 2017년 12월 17일 기준 1등인 영화 '강철비'라는 텍스트가 위치한 곳이

 

td -> div -> a href 의 텍스트로 위치해있기 때문에, td 클래스의 이름은 title인 것을 가져오도록 작성하였습니다.

 

1
2
3
4
5
6
7
8
9
10
11
<td class="title">
    <div class="tit3">
        <a href="/movie/bi/mi/basic.nhn?code=155665" title="강철비">강철비</a>
    </div>
 
    </td><td class="title">
        <div class="tit3">
            <a href="/movie/bi/mi/basic.nhn?code=160399" title="기억의 밤">기억의 밤</a>
    </div>
 
...(중략)...
cs

 

이렇게 가져오며,

 

여기서

 

<a href="/movie/bi/mi/basic.nhn?code=155665" title="강철비">강철비</a>

 

위 줄의 빨간색의 강철비 텍스트를 가져오기 위해서는

 

1
print (titles[0].find('a').text)
cs

 

와 같이 작성하여 가져올 수 있습니다.

 

그렇다면, 50개의 모든 영화순위를 가져오기 위해 반복문을 작성해보겠습니다.

 

1
2
3
4
5
rank = 1
 
for title in titles:
    print(str(rank) + "위 : " + title.find('a').text)
    rank += 1
cs

 

순위를 명시해주기 위한 rank 변수도 만들어 위와 같이 반복문을 작성하면

 

1
2
3
4
5
6
7
8
9
1위 : 강철비
2위 : 기억의 밤
3위 : 꾼
4위 : 어쌔신: 더 비기닝
5위 : 스타워즈: 라스트 제다이
6위 : 메리와 마녀의 꽃
7위 : 신과함께-죄와 벌
8위 : 오리엔트 특급 살인
...(중략)...
cs

 

이와 같이 2017년 12월 17일 기준의 영화 순위가 출력되게 됩니다.

 

여기서 멈추지 않고 추가로, 각 영화의 링크 주소도 가져와보도록 하겠습니다.

 

위의 영화 이름을 가져왔던 코드에 한 줄을 추가하여

 

1
2
print (titles[0].find('a').text)
print (titles[0].find('a')['href'])
cs

 

다음과 같이 만들어,

 

<a href="/movie/bi/mi/basic.nhn?code=155665" title="강철비">강철비</a>

 

위의 파란색으로 표시된 링크까지 가져올 수 있게 됩니다.

 

1
2
강철비
/movie/bi/mi/basic.nhn?code=155665
cs

 

링크를 완전하게 만들기 위해,

 

1
print ('http://movie.naver.com/' + titles[0].find('a')['href'])
cs

 

다음과 같이 수정하여,

 

1
http://movie.naver.com//movie/bi/mi/basic.nhn?code=155665
cs

 

위와 같은 완전한 링크를 얻어냅니다.

 

그럼 이제 영화 순위와 함께, 영화의 링크도 가져오는 전체 코드를 작성해보도록 하겠습니다.

 

1
2
3
4
5
6
7
8
9
10
11
from bs4 import BeautifulSoup
import urllib.request
 
html = urllib.request.urlopen('http://movie.naver.com/movie/sdb/rank/rmovie.nhn')
soup = BeautifulSoup(html, 'lxml')
titles = soup.find_all('td''title')
front_url = 'http://movie.naver.com/'
rank = 1
for title in titles:
    print(str(rank) + " : " + title.find('a').text + ' / link : ' + front_url + title.find('a')['href'])
    rank += 1
cs

 

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
1위 : 강철비 / link : http://movie.naver.com//movie/bi/mi/basic.nhn?code=155665
2위 : 기억의 밤 / link : http://movie.naver.com//movie/bi/mi/basic.nhn?code=160399
3위 : 꾼 / link : http://movie.naver.com//movie/bi/mi/basic.nhn?code=152385
4위 : 어쌔신: 더 비기닝 / link : http://movie.naver.com//movie/bi/mi/basic.nhn?code=100205
5위 : 스타워즈: 라스트 제다이 / link : http://movie.naver.com//movie/bi/mi/basic.nhn?code=125488
6위 : 메리와 마녀의 꽃 / link : http://movie.naver.com//movie/bi/mi/basic.nhn?code=159037
7위 : 신과함께-죄와 벌 / link : http://movie.naver.com//movie/bi/mi/basic.nhn?code=85579
8위 : 오리엔트 특급 살인 / link : http://movie.naver.com//movie/bi/mi/basic.nhn?code=154272
9위 : 반드시 잡는다 / link : http://movie.naver.com//movie/bi/mi/basic.nhn?code=155411
10위 : 이프 온리 / link : http://movie.naver.com//movie/bi/mi/basic.nhn?code=39440
11위 : 뽀로로 극장판 공룡섬 대모험 / link : http://movie.naver.com//movie/bi/mi/basic.nhn?code=169349
12위 : 덩케르크 / link : http://movie.naver.com//movie/bi/mi/basic.nhn?code=146480
...(중략)...
41위 : 무서운 꿈 / link : http://movie.naver.com//movie/bi/mi/basic.nhn?code=170236
42위 : 역모 - 반란의 시대 / link : http://movie.naver.com//movie/bi/mi/basic.nhn?code=142210
43위 : 정글 / link : http://movie.naver.com//movie/bi/mi/basic.nhn?code=158623
44위 : 미옥 / link : http://movie.naver.com//movie/bi/mi/basic.nhn?code=142317
45위 : 킹스맨: 골든 서클 / link : http://movie.naver.com//movie/bi/mi/basic.nhn?code=149747
46위 : 극장판 포켓몬스터 너로 정했다! / link : http://movie.naver.com//movie/bi/mi/basic.nhn?code=165722
47위 : 쥬라기 월드: 폴른 킹덤 / link : http://movie.naver.com//movie/bi/mi/basic.nhn?code=154285
48위 : 1급기밀 / link : http://movie.naver.com//movie/bi/mi/basic.nhn?code=149504
49위 : 러브 액츄얼리 / link : http://movie.naver.com//movie/bi/mi/basic.nhn?code=36843
50위 : 원더 / link : http://movie.naver.com//movie/bi/mi/basic.nhn?code=151196
 
2017-12-17
cs

 

이렇게 BeautifulSoup을 통해 몇 줄 안되는 코드로 영화 순위를 가져오는 코드를 작성해보았습니다.

'크롤링' 카테고리의 다른 글

Selenium(셀레니움)을 활용한 크롤링  (2) 2017.12.18

+ Recent posts