hjc_ 2020. 8. 17. 20:02

네이버 영화 목록 스크랩

# https://movie.naver.com/movie/running/current.nhn
from urllib.request import urlopen
from bs4 import BeautifulSoup

req = urlopen("https://movie.naver.com/movie/running/current.nhn")
html = req.read().decode("utf-8") # 데이터 불러와서 인코딩
# print(html[:200])
# soup 객체 만들기
## BeautifulSoup으로 html소스를 python객체로 변환하기
## 첫 인자는 html소스코드, 두 번째 인자는 어떤 parser를 이용할지 명시.
## 이 글에서는 Python 내장 html.parser를 이용했다.
soup = BeautifulSoup(html, "html.parser")
# print(soup.prettify())

current_movies = soup.select("ul.lst_detail_t1 > li")
# current_movies[0]

movies =[]

movie_list = []

for movie in current_movies:
    titles = movie.select(".tit > a")[0]
#     print(titles)
    
    movie_list.append({
        "title": titles.text.strip(),
        "link" : titles['href']
    })
    
print("네이버 영화 최신 영화 목록")
for movie in movie_list:
    print("{title}:{link}".format_map(movie))

결과

더보기

네이버 영화 최신 영화 목록

트롤: 월드 투어:/movie/bi/mi/basic.nhn?code=191633

레이니 데이 인 뉴욕:/movie/bi/mi/basic.nhn?code=152691

패왕별희:/movie/bi/mi/basic.nhn?code=14448

저 산 너머:/movie/bi/mi/basic.nhn?code=193092

마이 스파이:/movie/bi/mi/basic.nhn?code=190721

나의 청춘은 너의 것:/movie/bi/mi/basic.nhn?code=188361

프리즌 이스케이프:/movie/bi/mi/basic.nhn?code=193804

호텔 레이크:/movie/bi/mi/basic.nhn?code=179481 1917:/movie/bi/mi/basic.nhn?code=187321

캣츠토피아:/movie/bi/mi/basic.nhn?code=176028

라라랜드:/movie/bi/mi/basic.nhn?code=134963

슈팅걸스:/movie/bi/mi/basic.nhn?code=74028

기생충:/movie/bi/mi/basic.nhn?code=161967 

.... 

 

#TODO 영화제 영화 목록 추출
# https://movie.naver.com/movie/running/current.nhn?view=list&tab=festival
req2 = urlopen("https://movie.naver.com/movie/running/current.nhn?view=list&tab=festival")
html2 = req2.read().decode("utf-8") # 데이터 불러와서 인코딩
soup2 = BeautifulSoup(html2, "html.parser")
# print(soup.prettify())

current_movies2 = soup2.select("ul.lst_detail_t1 > li")
# current_movies[0]

movies2 =[]

movie_list2 = []

for movie2 in current_movies2:
    titles2 = movie2.select(".tit > a")[0]
#     print(titles)
    
    movie_list2.append({
        "title": titles2.text.strip(),
        "link" : titles2['href']
    })
    
print("네이버 영화제 목록")
for movie2 in movie_list2:
    print("{title}:{link}".format_map(movie2))

결과 

더보기

네이버 영화제 목록

베를린 천사의 시:/movie/bi/mi/basic.nhn?code=10568

알래스카의 혼:/movie/bi/mi/basic.nhn?code=16910

흑과 백:/movie/bi/mi/basic.nhn?code=29644

 

# 포스터 이미지 일괄 다운로드 
# current_movies[0]
import re

image_list =[]
for movie in current_movies:
    image = movie.select("img")[0]
    image_list.append({"title":re.sub(r"[\/:*?<>|.]","-",image["alt"].strip()),
                      "src":image["src"]})
image_list
# 다운로드 디렉터리 생성
import os
from urllib.request import urlretrieve
if not os.path.exists("./poster"): # poster디렉터리 없으면
    os.makedirs("./poster")

# 루프를 돌면서 다운로드 
for image in image_list:
    
    target_filename = "./poster/"+ image['title'] + ".jpg"
    source_url = image["src"]
    
    #다운로드
    urlretrieve(source_url, target_filename)
    
print("Download Complete")