Web 사이트 파싱 하는 프로젝트를 진행하면서 크롤링을 접할 기회가 생겼다.
크롤링을 할 때 주의할 점은 함부로 접근해서 무작위로 파싱 및 크롤링해 오는 것이 아니라 robots.txt라는 설정을 확인 후 접근이 허가가 되어 있는지 확인이 필요하다.
robots.txt란?
- robots.txt는 검색 엔진 로봇에게 웹사이트를 어떻게 크롤링 해야 하는지 가이드를 주는 문서 파일이다.
- 가이드를 하면서 크롤러에게 URL의 어떤 경로에 접근이 가능한지 아닌지 알려주며 웹사이트의 로드맵 가이드를 하는 역할을 한다.
- robots.txt는 항상 사이트의 루트 폴더 또는 메인 디렉터리에 위치해야 하며 대부분 텍스트 파일로 설정이 되어 있다.
robots.txt 지시어 및 규칙
크롤링을 사용하는 개발자의 입장에서 접근이 허용되어 있는지 어느 정보까지 가져올 수 있는지 설정을 파악하기 위해선 robots.txt가 어떤 용어와 규칙이 있는지 알아야 한다. 쓰이는 용어를 이해한 뒤, 크롤링하기 위한 web site 도메인 주소에 /robots.txt를 입력하여 해당하는 파일을 가져올 수 있다.
[도메인 주소]/robots.txt
- robots.txt 지시어
- user-agent : 규칙이 적용되는 크롤러의 이름.
- disallow : 유저 에이전트의 디렉터리 또는 페이지 크롤링을 차단한다.
- allow : 유저 에이전트의 디렉토리 또는 페이지 크롤링을 허용한다. (구글 봇에만 적용 가능 하니 참고하길 바람)
- sitemap : web site의 모든 리소스를 나열한 목록 파일
- 크롤링 봇 이름 : Googlebot(구글), Yeti(네이버), Bingbot(빙), Slurp(야후)
- robots.txt 규칙
www.예시.com/robots.txt를 예시로 몇 가지의 규칙에 대해 알아보자.
크롤링 차단하기
사이트의 모든 콘텐츠를 크롤러로부터 차단하기 위한 설정이다.
robots.txt 크롤링 차단
user-agent: *
Disallow: /
- user-agent는 크롤링 봇을 말하며 *표시가 된 것은 모든 크롤링 봇을 말한다.
- Disallow는 페이지를 크롤링하지 않게 설정이며, /표시를 하면 크롤링을 차단할 수 있다.
위의 내용을 해석하면 모든 크롤링 못에게 www.예시. com & 포함한 모든 페이지의 크롤링을 차단한다는 뜻이다.
크롤링 허용하기
반대로 모든 크롤링 봇의 접근을 허용하는 설정이다.
robots.txt 크롤링 허용
**user-agent: ***
Disallow:
- 이렇게 disallow에 /표시가 없으면 크롤링을 허락한다는 것을 나타낸다.
위의 내용을 해석하면 모든 크롤링 봇이 www.예시.com 를 포함한 모든 페이지의 크롤링을 허용한다는 뜻이다.
특정 크롤러 차단하기 - 특정 폴더
특정 폴더를 크롤러로부터 차단하기 위한 설정이다.
robots.txt 크롤링 차단
user-agent: Googlebot
Disallow: /
Googlebot은 위에서 언급했듯이 구글의 크롤링 봇의 이름이다.
해당하는 크롤링 봇의 접근을 차단하고 싶다면 user-agen에 해당하는 크롤링 봇의 이름을 입력해 주고
특정 위치에만 크롤링 봇을 차단하고 싶다면 위치를 아래와 같이 선정할 수 있다.
robots.txt 크롤링 차단 - 특정 폴더
user-agent: Googlebot
Disallow: /api/scrap/parse
위와 같이 설정을 하게 되면 www.예시.com/api/scrap/parse/ 의 url이 포함된 페이지는 크롤링을 차단할 수 있다.
아래와 같이 여러 개의 디렉토리의 콘텐츠 크롤링 차단도 가능하다.
robots.txt 크롤링 차단 - 특정 폴더
user-agent: Googlebot
Disallow: /api/scrap/parse/
Disallow: /home/
특정 크롤러 차단하기 - 특정 웹페이지
크롤러가 특정 웹페이지를 액세스 못하게 차단할 수 있다.
robots.txt 크롤링 차단 - 특정 웹페이지
user-agent: Yeti
Disallow: /home/home.html
위의 내용을 해석하면 네이버 크롤러 Yeti가 www.예시. com/home/home.html의 특정 페이지를 크롤링으로 접근하지 못하게 차단한다는 뜻이다.
하나를 제외한 모든 크롤러 허용/차단하기
robots.txt 크롤링 차단 - 하나 제외한 모든 크롤러 허용
user-agent: Unnecessarybot
Disallow: /
user-agent: *
Allow: /
위의 내용을 해석하면 Unnecessarybot만 차단이 되며 나머지 크롤러 봇은 사이트에 접근할 수 있다는 뜻이다.
robots.txt 크롤링 차단 - 하나의 크롤러만 허용
user-agent: Googlebot-news
Allow: /
user-agent: *
Disallow: /
위의 내용을 해석하면 반대로 Googlebot-news만 허용이 되며 나머지 크롤러 못은 사이트에 접근이 차단된다는 뜻이다.
이미지 크롤링 차단
구글 이미지에서 특정 이미지의 크롤링을 차단하고 싶다면 구글 이미지 크롤러가 접근하지 못하게 설정해야 한다.
robots.txt - 이미지 크롤링 차단
user-agent: Googlebot-image
Disallow: /images/dogs.jpg
위의 내용을 해석한다면 Googlebot-image봇은 강아지와 관련된 이미지에 접근하여 크롤링하지 못한다는 뜻이다.
특정 문자열로 끝나는 URL 크롤링 차단
특정 문자열로 끝나는 URL을 차단하고 싶다면 $표시를 사용해야 한다.
robots.txt - 특정 문자열 URL 크롤링 차단
user-agent: Googlebot
Disallow: /*. git$
user-agent: Googlebot
Disallow: /*. xls$
. xls는 엑셀 링크를 뜻하고. gif는 GIF 파일을 의미하는데 크롤러 봇에 해당하는 파일들에 접근을 차단한다는 뜻이다.
robots.txt 설정하기
- 페이지에 robots.txt가 설정이 되어 있는지 모르는 경우에는 도메인/robots.txt를 마지막에 입력하여 확인해 보면 된다.
- 결과가 no.txt가 나온다면 설정이 되어 있지 않은 상태이다.
- robots.txt를 설정하기 앞서 이 파일은 HTM파일이 아닌 일반 텍스트 파일로 작성해야 하고 루트 디렉터리에 위치해야 한다.
- robots.txt를 만들기 위해서는 아래의 특징을 명심해야 한다.
1. 파일 이름은 robots.txt 파일이 있어야 한다.
2. 사이트 당 하나의 robots.txt파일이 있어야 한다.
3. 철자 오류가 있으면 안 된다.
위의 세 가지뿐 아니라 앞에서 설명된 지시어와 규칙을 염두하고 robots.txt를 만들어야 한다.