# scraping naver movie
# scraping: 웹 브라우저로 접근할 수 있는 페이지에 있는 정보 중, 각자가 원하는 정보를 선택하여 로컬 컴퓨터로 가져오는 과정
특정 웹사이트가 타겟
# crawling: Google, Yahoo, MSN 처럼 모든 정보를 가져옴
# scraping tool
- beautiful soup 4: HTML parser
- lxml: XML parser
- requests: HTTP를 통하여 웹서버와 통신하기 위한 패키지
# 웹페이지 탐색
# 네이버 영화 url
# 라라랜드 'http://movie.naver.com/movie/bi/mi/basic.nhn?code=134963'
# 그래이트 워 'http://movie.naver.com/movie/bi/mi/basic.nhn?code=126034'
# 조작된 도시 'http://movie.naver.com/movie/bi/mi/basic.nhn?code=127382'
from bs4 import BeautifulSoup import os import re import requests import sys from pprint import pprint url_basic_base = 'http://movie.naver.com/movie/bi/mi/basic.nhn?code=%s'
# 라라랜드 id
movie_id = 134963
# 웹페이지 가져오기
# requests: 네이버 영화 서버에 어떤 것을 요청할 수 있는 라이브러리 url = url_basic_base % movie_id r = requests.get(url)
# 해당 url의 서버로부터 웹페이지의 정보들을 가져옴
# 텍스트 외에도 header와 같은 많은 정보들을 포함
html = r.text
page = BeautifulSoup(html, 'lxml')
# 스트링 형식의 html을 lxml이라는 XML parser를 이용하여 문서를 구조화
print(r.headers)
{'Server': 'Apache', 'Pragma': 'no-cache', 'Expires': 'Thu, 01 Jan 1970 00:00:00 GMT', 'Cache-Control': 'no-cache, no-store', 'Content-Language': 'ko-KR', 'P3P': 'CP="ALL CURa ADMa DEVa TAIa OUR BUS IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE LOC OTC", CP="ALL CURa ADMa DEVa TAIa OUR BUS IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE LOC OTC"', 'Vary': 'Accept-Encoding', 'Content-Encoding': 'gzip', 'Content-Type': 'text/html;charset=UTF-8', 'Content-Length': '37691', 'Accept-Ranges': 'bytes', 'Date': 'Wed, 30 Aug 2017 02:50:24 GMT', 'X-Varnish': '3171435474', 'Age': '0', 'Via': '1.1 varnish', 'X-Varnish-Cache': 'MISS', 'connection': 'close'}
# 영화 제목 가져오기
# 제목 드래그한 뒤, 크롬의 Inspect(크롬 한글은 검사)을 누르면 해당 부분의 source code가 우측에 하이라이팅 되어 나타남
# La La Land 영화 제목은 strong이라는 태그 안에 들어있으며,
# 그 태그의 class는 h_movie2
title = page.select('div[class=mv_info] strong[class=h_movie2]')
# mv_info라는 클래스 이름을 갖는 div 아래에 속한, class 이름이 h_movie2인 strong이라는 것을 찾아서 가져온다는 코드
# 결과가 하나가 아닐 수 있으므로 return type은 list
print(type(title))
<class 'list'>
print(len(title), '\n')
2
print(title, '\n')
[<strong class="h_movie2" title="La La Land , 2016">La La Land
,
2016</strong>, <strong class="h_movie2" title="La La Land, 2016">La La Land, 2016</strong>]
print(title[0], '\n')
<strong class="h_movie2" title="La La Land , 2016">La La Land
,
2016</strong>
print(title[1], '\n')
<strong class="h_movie2" title="La La Land, 2016">La La Land, 2016</strong>
print(type(title[0]))
<class 'bs4.element.Tag'>
print(title[0].text)
La La Land
,
2016
print(title[0].text.replace("\t", '').replace('\r','').replace('\n',''))
La La Land, 2016
title = page.select('div[class=mv_info] h3[class=h_movie] a')
print(title[0].text)
라라랜드
'파이썬' 카테고리의 다른 글
konlpy 설치 (0) | 2017.08.30 |
---|---|
beautiful soup 4, lxml, requests 설치 방법 (1) | 2017.08.30 |
_yield_len_iter (0) | 2017.08.29 |
slice and sorting (0) | 2017.08.29 |
list comprehension (0) | 2017.08.28 |