컴퓨터 프로그램이 웹 페이지에 접속하여 데이터를 자동으로 추출하는것이 스크래핑이다. 이는 스크린 스크래핑과 웹 스크래핑으로 구분된다. 스크린 스크래핑은 다른 프로그램의 화면 출력을 영상처리 기법 등으로 읽어내서 데이터를 추출하는것이고, 웹 스크래핑은 웹 페이지에서 자동화된 프로세스를 사용하여 데이터를 추출하는것을 말한다. 대표적인 파이썬 라이브러리로 Beautiful Soup 이 있다.
Google Maps와 같은 사이트는 데이터를 보호해야할 이유가 있기 때문에 너무 많은 결과를 빠르게 요청하는것을 허용하지않는다. 또한 웹 서버에 많고 반복되는 요청을 보내면 대역폭을 소모하여 다른 사용자의 웹사이트 속도가 느려지고 전혀 응답하지 않을 정도로 서버가 과부하 될 수 있다.
웹 스크래핑을 위해 파이썬 기술을 사용하기 전, 대상 사이트의 허용 정책을 항상 확인하여 자동화된 도구로 웹사이트에 접근하는것이 이용 약관을 위반하는지 확인해야한다.
Real Python 서버에 호스팅된 페이지를 사용할것이다. 우선 파이썬 IDEL 을 실행해준다.
파이썬의 표준 라이브러리에서 웹 스크래핑에 유용한 패키지. URL 작업을 위한 도구를 포함하고있다. urllib.request 모듈에는 프로그램 내에서 URL을 열 수 있는 urlopen() 함수가 있다.
>>> from urllib.request import urlopen
먼저 IDLE 의 대화형 창에 urlopen()을 가져온다.
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
열고자 하는 웹페이지의 url
>>> page = urlopen(url)
웹 페이지를 열기 위해 urlopen()에 url 전달
>>> page
<http.client.HTTPResponse object at 0x105fef820>
urlopen()은 HTTPResponse 객체를 반환
>>> html_bytes = page.read()
>>> html = html_bytes.decode("utf-8")
페이지에서 HTML을 추출하기위해 먼저 HTTPResponse 객체의 .read()메소드를 사용하여 바이트 시퀀스를 반환. 그리고 .decode()를 이용하여 UTF-8을 사용하여 바이트를 문자열로 디코딩.
>>> print(html)
<html>
<head>
<title>Profile: Aphrodite</title>
</head>
<body bgcolor="yellow">
<center>
<br><br>
<img src="/static/aphrodite.gif" />
<h2>Name: Aphrodite</h2>
<br><br>
Favorite animal: Dove
<br><br>
Favorite color: Red
<br><br>
Hometown: Mount Olympus
</center>
</body>
</html>