1 / 7
크롤러: 페이지를 대신 읽는 프로그램 · 크롤러란

주제 1 / 3

크롤러: 페이지를 대신 읽는 프로그램

크롤러란

크롤러(Crawler)란 사람이 브라우저로 하던 일을 대신하는 프로그램입니다. 사람은 사이트를 열고, 화면을 읽고, 필요한 부분을 복사해 둡니다. 크롤러는 같은 일을 코드로 처리합니다. 매일 아침 쇼핑몰 가격을 확인하거나 여러 블로그의 새 글을 모으는 일처럼, 같은 페이지를 반복해서 읽어야 할 때 주로 씁니다.

크롤러가 하는 일을 노드로 나누면 네 개입니다.

  • 페이지 요청: 사이트 주소로 페이지를 달라고 요청합니다.
  • HTML 받기: 사이트가 보낸 HTML을 받습니다.
  • 원하는 부분 고르기: HTML에서 제목이나 가격처럼 필요한 부분만 골라냅니다.
  • 저장: 고른 값을 파일이나 데이터베이스에 남깁니다.

앞의 두 노드는 크롤러와 사이트가 주고받는 일입니다. 크롤러가 주소로 요청을 보내면 요청은 인터넷을 거쳐 사이트의 서버에 도착하고, 서버는 그 페이지의 HTML을 담아 응답합니다. 그림 1이 이 요청과 응답이 오가는 순서입니다.

1/4. 크롤러가 요청 문서를 들고 있다2/4. 요청 문서가 인터넷을 지나 쇼핑몰 서버로 간다3/4. 쇼핑몰 서버가 HTML 문서를 담아 크롤러 쪽으로 보낸다4/4. HTML 문서가 크롤러에 도착했다
그림 1. 크롤러의 요청과 서버의 응답 (네 장면)

뒤의 두 노드는 받은 HTML 안에서 일어납니다. 그림 2는 쇼핑몰 상품 목록에서 상품마다 상품명, 가격, 평점을 골라 표의 한 행으로 만들고, 그 행들을 products.csv 파일에 쌓는 모습입니다. 화면의 39,000원을 파일에는 39000처럼 숫자만 남기는 정리도 이 단계에서 합니다.

왼쪽은 shop.example.com/products 화면의 상품 카드 세 개로, 무선 키보드 39,000원 평점 4.6, USB 허브 18,000원 평점 4.3, 노트북 거치대 27,000원 평점 4.8이다. 첫 카드의 상품명, 가격, 평점이 추출되어 오른쪽 표의 한 행이 된다. 아래 products.csv 파일에는 상품명, 가격, 평점 열 아래 행이 쌓이고, 새로 추가된 노트북 거치대와 모니터 암 행이 강조되어 있다.
그림 2. 상품 카드에서 값을 골라 표의 행으로 만들고, 파일에 쌓기

Lesson 0-1에서 다룬 블로그 요약 자동화에도 크롤러가 있었습니다. 본문 가져오기 노드입니다. 그때 블로그를 하나 추가할 때마다 이 노드에 "article 태그 안에서 본문을 찾아라" 같은 규칙을 넣었는데, 이 규칙이 정확히 무엇인지 이번 강의에서 설명합니다.

이번 강의에서는 Python 코드 네 줄로 된 크롤러를 실행해 본 다음, 크롤러가 HTML에서 원하는 부분을 찾는 방법을 DOM과 선택자 순서로 설명하겠습니다.