용어 사전
크롤러Crawler
웹페이지를 요청해 받고, 그 안에서 필요한 부분을 골라 저장하는 프로그램. 페이지에서 정보를 꺼내는 일만 따로 스크래핑(Scraping)이라고도 부른다
사람은 브라우저로 사이트를 열고, 화면을 읽고, 필요한 부분을 복사합니다. 크롤러는 이 일을 코드로 합니다. 하는 일을 노드로 나누면 네 가지입니다.
앞의 두 노드는 사이트의 서버와 주고받는 일이고, 뒤의 두 노드는 받은 HTML 안에서 일어나는 일입니다. 받은 HTML은 긴 문자열이라서, 원하는 부분을 고르기 전에 파싱해서 DOM 트리로 바꿉니다. 그다음 선택자로 필요한 요소를 찾습니다.
아래에서 [다음]을 누르면 크롤러가 네 노드를 하나씩 지나고, 그 단계에서 주고받은 데이터가 나옵니다.
url = "https://books.toscrape.com/"
어디에 쓰나요
- 쇼핑몰 가격을 매일 확인해 표로 쌓기
- 여러 블로그의 새 글을 한곳에 모으기
- 검색 엔진이 웹페이지를 모아 검색 결과 만들기. 구글의 Googlebot도 크롤러입니다.
잘 돌던 크롤러가 빈 값을 돌려줄 때
크롤러는 사이트의 HTML 구조에 맞춰 쓴 선택자로 값을 찾습니다. 사이트가 디자인을 바꾸면서 태그나 클래스 이름이 바뀌면, 같은 선택자로는 아무것도 찾지 못합니다. 코드를 고치기 전에 개발자 도구로 지금 사이트의 DOM부터 확인해 보세요.
처음부터 값이 비어 있다면 다른 경우일 수 있습니다. 화면의 글자를 JavaScript가 나중에 채워 넣는 페이지는, 크롤러가 받은 처음 HTML에 그 글자가 없습니다. 브라우저의 페이지 소스 보기에서 찾는 글자가 보이는지 확인하면 구분할 수 있습니다.
가져오기 전에 확인할 것
기술적으로 가져올 수 있다고 해서 다 가져와도 되는 것은 아닙니다. 사이트의 robots.txt와 이용약관을 확인하고, 요청 사이에 간격을 두어 사이트에 부담을 주지 않아야 합니다. 사이트가 데이터를 주는 API를 따로 제공한다면 API를 쓰는 편이 안정적입니다.
"books.toscrape.com 첫 페이지의 책 제목과 가격을 CSV로 저장하는 Python 크롤러를 만들어 줘. requests와 BeautifulSoup을 쓰고, 어떤 선택자를 왜 골랐는지 DOM 구조로 설명해 줘."
크롤링과 스크래핑
원래 크롤링은 링크를 따라 여러 페이지를 돌아다니는 일을, 스크래핑은 한 페이지에서 값을 꺼내는 일을 가리킵니다. 실제로는 두 말을 섞어 쓰는 경우가 많습니다.