Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

urllib.robotparser – Python의 robots.txt 파서 완벽 정리

웹사이트 소유자는 /robots.txt 파일을 통해 웹 로봇에게 자신의 사이트에 대한 지침을 전달합니다. 이를 Robots Exclusion Protocol(로봇 배제 프로토콜)이라고 부릅니다.

이 파일은 웹 리소스에 자동으로 접근하는 프로그램, 즉 스파이더(spider), 크롤러(crawler) 등을 위한 간단한 텍스트 기반 접근 제어 시스템입니다. 파일에는 사용자 에이전트(user agent) 식별자가 먼저 명시되고, 그 뒤에 해당 에이전트가 접근해서는 안 되는 URL 목록이 나열됩니다.

robots.txt 작성 예시

#robots.txt
Sitemap: https://example.com/sitemap.xml
User-agent: *
Disallow: /admin/
Disallow: /downloads/
Disallow: /media/
Disallow: /static/

이 파일은 일반적으로 웹 서버의 최상위(root) 디렉터리에 위치시킵니다. 위 예시에서 User-agent: *는 모든 크롤러에 적용되는 규칙임을 의미하며, Disallow 항목에 나열된 경로는 크롤링이 금지됩니다.

urllib.robotparser 모듈이란?

Python의 urllib.robotparser 모듈은 RobotFileParser 클래스를 제공합니다. 이 클래스는 robots.txt 파일을 게시한 웹사이트에서 특정 사용자 에이전트가 특정 URL을 가져올(fetch) 수 있는지 여부를 판단해 줍니다. 웹 크롤러를 개발할 때 예의 바른 크롤링(polite crawling)을 구현하는 데 필수적인 도구입니다.

RobotFileParser 클래스의 주요 메서드

set_url(url)

robots.txt 파일을 가리키는 URL을 설정합니다.

read()

설정된 robots.txt URL을 실제로 읽어 들여 파서에 전달합니다.

parse(lines)

lines 인수로 전달된 내용을 구문 분석합니다. 이미 읽어 온 텍스트를 직접 처리하고 싶을 때 유용합니다.

can_fetch(useragent, url)

robots.txt에 포함된 규칙에 따라 해당 사용자 에이전트가 지정한 URL을 가져올 수 있다면 True를, 그렇지 않다면 False를 반환합니다.

mtime()

robots.txt 파일을 마지막으로 가져온(fetched) 시간을 반환합니다.

modified()

robots.txt를 마지막으로 가져온 시간을 현재 시각으로 설정합니다.

crawl_delay(useragent)

해당 사용자 에이전트에 대한 robots.txt의 Crawl-delay 매개변수 값을 반환합니다. 요청 사이에 대기해야 할 초 단위 간격을 의미합니다.

request_rate(useragent)

Request-rate 매개변수의 내용을 RequestRate(requests, seconds)라는 네임드 튜플(named tuple) 형태로 반환합니다.

기본 사용 예제

from urllib import parse
from urllib import robotparser

AGENT_NAME = 'PyMOTW'
URL_BASE = 'https://example.com/'

parser = robotparser.RobotFileParser()
parser.set_url(parse.urljoin(URL_BASE, 'robots.txt'))
parser.read()

위 코드처럼 set_url()로 robots.txt의 위치를 지정한 뒤 read()로 내용을 불러오면, 이후 can_fetch() 메서드를 호출하여 특정 URL의 크롤링 허용 여부를 손쉽게 확인할 수 있습니다.