Python/웹 크롤링 & 웹 자동화
02-Naver Movie
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")