본문 바로가기
토이프로젝트/[크롤링] 네이버 영화 크롤링하기

[크롤링] 네이버에서 영화정보 가져오기 - #5 ('국가 -> 개봉연도' 변경)

by 프룹 2022. 1. 5.
반응형

당초 계획은 제작국가를 통해서 네이버에 등록된 모든 영화를 가져오는 것이었습니다. 근데 계획을 좀 변경해서, 사실 코드를 오랜만에 다시 짜면서 생각을 못 하고 있었는데 옛날 코드를 발견하면서 기억이 돌아와... , 영화의 개봉 연도 별로 파일을 저장하는 것이 좋겠다는 판단이 들었습니다. 그래도 뭐 크게 바뀐 건 없습니다. 그냥 매번 하던 대로 하면 됩니다.

 

나중에 코드를 완성하면 멀티프로세싱으로 고속 처리를 할 예정입니다. 그리고 또 네이버 측에서 짧은 시간 내 다량의 트래픽을 발생시키면, 어쩌면 차단의 가능성이 있을 수 있기 때문에 자동으로 위 이미지에서 보이는 연도를 가져와서 url에 하나 대입해가며 전체 영화를 한큐에 가져오는 프로그램을 구성하기보다는 연도는 수동으로 입력해주고 각 연도별로 저장을 해주는 방식이 더 좋을 것으로 판단됩니다. 그래서 일단 연도별 영화 코드를 가져오는 코드를 만들어보겠습니다.

 

 크게 달라진건 없습니다. nation이라는 param이 open으로 바뀐 정도죠?

 

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
29
30
31
32
33
34
35
36
37
def getMovieCodeByYear(year):
    movieCode = []
 
    url = f'https://movie.naver.com/movie/sdb/browsing/bmovie.naver?open={year}&page=10000'
 
    response = requests.get(url)
 
    if response.status_code == 200:
        html = response.text
        soup = BeautifulSoup(html, 'lxml')
        
        # html에서 div 태그 중 class이름이 pagenavigation 태그를 찾아라
        pagenavigation = soup.find('div','pagenavigation')
        # pagenavigation내 <a> 태그 중 마지막 태그의 text 값
        lastPage = pagenavigation.find_all('a')[-1].text
 
        for i in range(1int(lastPage)+1):
            url = f'https://movie.naver.com/movie/sdb/browsing/bmovie.naver?open={year}&page={i}'
            response2 = requests.get(url)
 
            if response2.status_code == 200:
                html = response2.text
                soup = BeautifulSoup(html, 'lxml')
                
                # html에서 ul 태그 중 class이름이 directory_list 태그를 찾아라
                directory_list = soup.find('ul','directory_list')
                allA = directory_list.findAll('a')
                for a in allA:
                    if '?code=' in str(a):
                        #print(str(a).split('?code=')[1].split('"')[0])
                        movieCode.append(str(a).split('?code=')[1].split('"')[0])
            else : 
                print(response2.status_code)
    else : 
        print(response.status_code)
        
    return movieCode
cs

앞서서 getMovieCodeByNation()함수가 있었죠?? 그 코드에서 국가 코드를 받아서 연속 처리하는 for문만 없애주고 url만 살짝 수정해주면 다 끝나는 겁니다. 간단하죠?

 

다음 포스팅에서는 본격적으로 영화의 정보를 가져오는 코드를 만들어보겠습니다~

반응형

댓글