# 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')


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

+ Recent posts