crawling - robots.txt와 주의점

on under python
2 minute read

크롤러를 만들기 전에 알아야 할 사항

웹페이지의 내용을 가져 오는 것을 크롤링(Crawling) 또는 스크래핑(Scraping)이라고 합니다.
가져와야 할 페이지들이 많은 경우, 구글이나 네이버, 다음과 같은 검색 엔진 사이트들은 검색 속도를 높이기 위해 robot 이라는 프로그램을 만들어서 자동으로 웹 페이지들을 크롤링하는 방법을 사용합니다.

그런데 개인 정보가 들어있는 사이트들은 크롤링이 안 되도록 막고 싶을 수 있습니다. 그래서 무분별한 크롤링을 막고 제어하기 위해 1994년 6월에 로봇 배제 규약이 만들어졌습니다. 말 그대로 로봇이 수집을 못하게 막을 목적으로 만들어졌는데 로봇의 접근 관련 내용(크롤링 허가/불허의 여부)을 robots.txt라는 파일에 적어두는 방법입니다.

만약 크롤링하는 로봇 프로그램이 http://www.example.com의 웹 사이트를 방문할 경우 가장 먼저 http://www.example.com/robots.txt 파일을 찾게 됩니다.
그리고 robots.txt 파일이 있을 경우 파일을 읽어 그 내용을 분석해서 수집해도 되는 콘텐츠만 수집하고 허락이 안 된 내용은 수집하지 않습니다.
이 규약의 의도는 좋지만 강제 안이 아닌 권고 안이라서 접근 방지 설정을 하였다고 해도, 다른 사람들이 그 파일에 접근할 수 있습니다.

robots.txt 엔 아래와 같은 내용이 들어 있습니다.

User-agent: *  # 모든 로봇(robot)들에 적용합니다
Disallow: /  # 모든 페이지들의 색인(indexing)을 금지합니다

Uuser-agent : 접근을 허용하지 않을 로봇 이름을 설정합니다
Disallow : 허용하지 않을 항목에 대해 설정합니다
# 단 "Disallow"를 빈 값으로 설정할 경우, 모든 하위 경로에 대한 접근이 가능합니다
# 그리고 robots.txt 파일에는 최소한 한 개의 "Disallow" 필드(field)가 존재해야만 합니다
# 아래의 형식으로 사용됩니다
Disallow: /help   # /help.html 과 /help/index.html 둘 다 허용 안됩니다
Disallow: /help/  # /help/index.html는 허용 안하나, /help.html 은 허용됩니다

만약 특정 파일 확장자를 차단하는 방법은 robots.txt 파일에 아래의 내용을 추가하면 됩니다.

Disallow: /*.xml$  # 루트 하위에 있는 확장자가 xml인 모든 파일의 색인을 거부합니다
Disallow: /test.html?  # 루트 하위에 test.html과 ?가 포함된 파일의 색인을 거부합니다

위의 내용은 robots.txt 파일을 사용할 경우이지만 파일을 사용하지 않고 HTML 소스 코드안에 메타 태그를 사용하여 설정할 수도 있습니다.

<meta name="ROBOTS" content="속성"/>

content 항목의 속성 값으로는 다음의 6가지가 올 수 있습니다.

  • index : 해당 페이지 정보를 검색해서 등록하는 것을 허락합니다.
  • noindex : 해당 페이지 정보를 검색해서 등록하는 것을 허락하지 않습니다.
  • follow : 해당 페이지에 있는 링크를 추적하는 것을 허락합니다.
  • nofollow : 해당 페이지에 있는 링크를 추적하는 것을 허락하지 않습니다.
  • all : 해당 페이지의 정보를 검색해서 등록하고 해당 페이지에 있는 링크를 추적하는 것을 허락합니다.
  • none : 해당 페이지의 정보를 검색해서 등록하거나 해당 페이지에 있는 링크를 추적하는 것을 허락하지 않습니다.

만얃 여러 속성값을 동시에 지정하고자 할 때는 content=”noindex,nofollow”와 같이 쉼표로 구분하여 작성하면 되고 기본값은 “index,follow”입니다.

주의해야 할 점은 크롤링 해도 된다라고 해서 저작권 문제까지 자유로운 것은 아니라는 것입니다. 특히 신문기사나 책, 논문, 사진 등의 자료들은 저작권에 특별히 주의해야 합니다.

python
comments powered by Disqus