정보 요청자를 Client 라고 합니다
정보 제공자는 Server 라고 합니다
웹에서 정보를 받는 과정
- 클라이언트가 서버에 정보 요청
- 요청에 대하여 서버가 작업을 수행
- 수행한 작업의 결과를 클라이언트에 응답
요청 → 처리 → 응답
의 과정을 따라서 진행하게 됩니다
Hypertext Transfer Protocol 의 약자
웹 상에서 정보를 주고 받기 위한 약속을 뜻합니다
클라이언트가 서버로 요청하는것을 request 한다고 합니다
서버가 클라이언트에게 응답하는것을 response라고 합니다
HTTP는 요청/응답에 대한 정보를 담는 Head와 내용물인 Body로 나뉜다
Client의 request 예시
GET / HTTP 1.1 <- request 방식
Host : www.website.com <- Host의 주소
User-Agent : Mozilla/5.0 <- 사용자의 정보
..... <- 기타등등
Server의 response 예시
HTTP/1.1 200 OK ← request에 대한 응답의 상태코드
…
<html>…</html> ← request에서 요청했던 정보
직접 확인해보고 싶다면 브라우저에서 개발자 도구를 연 뒤 네트워크 탭을 확인해보면 볼수 있습니다
웹 브라우저는 HTML요청을 보내고
HTTP응답에 담긴 html문서를 우리가 보기 쉬운 형태로 화면을 그려내는 역활을 담당합니다
웹 페이지는 html 형식으로 되어있고
웹 브라우저는 우리가 HTTP 요청을 보내고 응답받은 HTML코드를 랜더링 해주는 역활을 합니다
웹 스크래핑을 위해선 웹 브라우저를 이해하는 과정이 필요합니다
파이썬으로 HTTP 통신을 하기위해서는 일단 request 라이브러리를 설치해야됩니다
pip install requests
를 실행해 라이브러리를 다운받아줍니다
라이브러리를 받았다면
import requests
res = requests.get("https://www.naver.com/")
print(res)
를 통해 잘 작동하는지 확인해봅시다
<Response [200]>
가 출력된다면 정상적으로 작동한 것입니다
res.headers 를 이용하면 head에 무슨 값이 들어가있는지 확인할수 있으며
res.body를 이용한다면 body에 무슨값이 들어오는지 확인할수 있습니다
하지만 res.body를 입력한다면 보통 웹페이지 전체 코드가 들어오게 됩니다
이러한 데이터는 불필요한 정보가 너무 많고 길지만 가공하면 효과적으로 사용 할 수 있는 데이터가 됩니다
웹 스크래핑
웹 페이지들로부터 우리가 원하는 정보를 추출 하는 것을 뜻합니다.
웹 크롤링
크롤러를 이용해서 웹 페이지의 정보를 인덱싱 하는것을 말합니다
웹 스크래핑은 데이터 추출을 목적으로 작동하고 웹 크롤링은 데이터 색인을 위해 데이터를 인덱싱하는 작업을 한다는 목적의 차이가 있습니다
웹 스크래핑의 예시
웹 크롤링의 예시
웹 스크래핑/크롤링을 통해 어떤 목적을 달성하고자 하는가
나의 웹 스크래핑/크롤링이 서버에 영향을 미치지는 않는가
를 생각하는것이 중요합니다
무분별한 웹 정보 추출과 사용은 법적인 제제를 받을수 있으며
과도하게 서버에 정보를 요청을 할경우 서버에 디도스 공격을 진행 하는것과 마찬가지입니다
웹 브라우징은 사람이 아닌 로봇이 진행하며 정보를 취득할수도 있습니다
일부 스팸 봇이나 악성 목적을 지닌 가짜 클라이언트 로봇은 웹 사이트에 진짜 클라이언트처럼 접근합니다. 그리고 무단으로 웹 사이트 정보를 긁어가거나, 웹 서버에 부하를 줍니다.
이러한 문제에 로봇이 모든 사이트에 대해 정보를 취득하는것이 정당한가에 대한 문제의식이 제기되어
1994년, REP(Robot Exclusion protocol)이 탄생하게됬습니다
이런 로봇들의 무분별한 접근을 통제하기 위해 마련된 것이 robots.txt입니다.
User-agent: *
Disallow: /
위 코드를 해석하면 모든 User-agent에 대해서 접근을 거부한다 라는 뜻이됩니다
User-agent: *
Allow: /
위코드는 모든 User-agent에 대한 접근을 허용한다는 뜻입니다
User-agent: MussgBot
Disallow: /
이 코드는 MussgBot이라는 User-agent에 대한 접근을 허용하지 않는다는 뜻입니다
웹 사이트의 robots.txt를 확인하고 싶을경우 웹페이지 뒤쪽에 /robots.txt를 붙여주면 됩니다
네이버("https://www.naver.com/robots.txt") 를 예시로 본다면 이러한 형태를 취하고있습니다
User-agent: *
Disallow: /
Allow : /$
해석하면 모든 User-agent에 대해 모든 요청을 거부합니다 하지만 기본 홈페이지는 허용합니다
라는 뜻을 가지고있습니다
브라우저는 html코드를 웹 페이지로 보여주기 위해 렌더링 엔진을 통하여 웹 문서를 로드 한 후 파싱을 진행하여 DOM을 만들게 됩니다

DOM을 알게되면 각각의 노드를 객체로 생각하며 문서를 더욱 편리하게 관리할 수 있습니다
DOM Tree를 순회해서 특정 원소를 추가할 수 있으며
var imgElement = document.createElement("img");
document.body.appendChild(imgElement)
DOM Tree를 순회해서 특정 원소를 찾을수 있다
document.getElementsByTagName("img")
원하는 요소를 동적으로 변경해줄수 있으며
원하는 요소를 쉽게 찾을수 있다
DOM을 알아서 웹 스크래핑에선 무엇을 할수있을까?
브라우저는 HTML을 파싱해서 DOM을 생성합니다
이를 바탕으로 요소를 변경하거나 찾아 낼 수 있습니다
파이썬을 이용해서 브라우저가 DOM을 생성하듯이 HTML을 분석하는 HTML Parser을 생성한다면
스크래핑의 목적인 웹 페이지들로부터 우리가 원하는 정보를 추출하는 행위를 보다 효과적으로 진행할수 있을것입니다