본문 바로가기

프로그래밍/Python

[파이썬 크롤링] #3. urllib으로 웹 페이지 추출

반응형

2021/01/02 - [프로그래밍/Python] - [파이썬 크롤링] #1. 크롤링이란 무엇일까요?

2021/01/02 - [프로그래밍/Python] - [파이썬 크롤링] #2. 개발 환경 설치와 파이썬 기초

 

3번째 urllib을 알아보기 이전에 

HTML에 대해서 알아보도록 하겠습니다.

 

HTML은 우리가 웹브라우저에 나타나는 화면을 말합니다.

아래와 같이 NAVER에 접속을 하면 우리 웹 브라우저에 화면이 나타죠? 

 

 


웹 페이지 추출

urllib을 활용해서 웹 페이지 추출하기


이번에는 파이썬에서 표준 라이브러리 urllib를 사용해서 웹 페이지를 추출해보도록 하겠습니다.

 

표준 라이브러라고 하는 것은 파이썬에서 기본적으로 제공해주는 라이브러리 입니다. 별도의 설치가 필요 없기 때문에

바로 사용하시면 됩니다. 

우선 urllib.request에서 urlopen함수를 사용해보도록 하겠습니다.

from urllib.request import urlopen

#urlopen 함수는 HTTPResponse 자료형의 객체를 반환
f = urlopen("https://www.naver.com")

print(type(f))
<class 'http.client.HTTPResponse'>

f를 프린트 해보면 urlopen 함수를 사용하면 HTTPResponse자료형 객체를 반환한 것을 확인 할 수 있죠.

이 클래스에서 read()라는 함수를 사용하면 실제 어떤 데이터들이 나올까요?

 

from urllib.request import urlopen

#urlopen 함수는 HTTPResponse 자료형의 객체를 반환
f = urlopen("https://www.naver.com")

data = f.read()

print(data)

... ><a href="https://help.naver.com/" data-clk="helpcenter">\xea\xb3\xa0\xea\xb0\x9d\xec\x84\xbc\xed\x84\xb0</a></li> </ul> <address class="addr"><a href="https://www.navercorp.com" target="_blank" data-clk="nhn">\xe2\x93\x92 NAVER Corp.</a></address> </div> </div> </div> </div> <div id="adscript" style="display:none"></div> </body> </html>\n'

출력해보면 urlopen 우리 화면에 나온 페이지의 HTML 코드가 리턴 된 것을 확인 할 수 있습니다.

 

 

그런데 HTTP 프로토콜은 urlopen하였을 때, 200이라는 상태값이 나와야만 정상적으로 출력이 됩니다.

혹시, 나타나지 않는 사람들은 f.status라고 값을 출력해보고 200이 잘 나오는지 확인을 해주세요. 200이 나오지 않는다면, 주소 값에 오류가 났을 경우가 있습니다.

 

from urllib.request import urlopen

#urlopen 함수는 HTTPResponse 자료형의 객체를 반환
f = urlopen("https://www.naver.com")

print(f.status)
PS C:\Users\PC\Desktop\Crawling> python .\3_urllib.py
200

 

그런데, f.read()를 해보면, 자료형이 bytes 자로형이므로 이를 HTML파일에 맞는 형태로 변환(디코딩)을 해줘야 합니다. 

요즘에는 UTF-8로 나오기 때문에 값이 안나온다 싶으면 utf-8로 변환해 줍니다.

 

이번에는 네이버 영화에서 랭킹 내용들을 한번 가져와 보도록 하겠습니다.

 

from urllib.request import urlopen

#urlopen 함수는 HTTPResponse 자료형의 객체를 반환
f = urlopen("https://movie.naver.com/movie/sdb/rank/rmovie.nhn")

encoding = f.info().get_content_charset(failobj="utf-8")
print('encoding:', encoding)

text = f.read().decode(encoding)
print(text)

 

최종적으로 내가 가져온 데이터는 html 파일이기 때문에

html으로 저장을 해주면 페이지 전체를 크롤링 하는게 끝이 납니다.

 

PS C:\Users\PC\Desktop\Crawling> python .\3_urllib.py > movies.html

 

그러면 movies.html 파일이 생성 된것을 확인 할 수 있죠?!

 


데이터 추출하기

추출한 웹페이지에서 원하는 데이터 추출하기


그럼 여기서 데이터를 추출해보도록 하겠습니다.

 

 

 

반응형