본문 바로가기
[업무 지식]/Crawling

[CacheControl] 변경된 데이터만 추출하기

by 에디터 윤슬 2025. 1. 1.

캐시와 관련된 HTTP 헤더

HTTP 헤더 설명
Last-Modified 콘텐츠의 최종 변경일을 나타냅니다
ETag 콘텐츠의 식별자를 나타냅니다. 콘텐츠가 변경되면 ETag의 값도 함께 바뀌게 됩니다
Cache-Control 콘텐츠를 캐시해도 괜찮은지 등의 캐시 방침을 나타냅니다
Pragma Cache-Control과 비슷한 것이었지만 현재는 하위 호환성 때문에 남아 있습니다
Expires 콘텐츠의 유효 기간을 나타냅니다

CacheControl을 사용해 캐시 처리하기

import requests
# pip install CacheControl
from cachecontrol import CacheControl  

session = requests.session()
# session을 래핑한 cached_session 만들기
cached_session = CacheControl(session)

# 첫 번째는 캐시돼 있지 않으므로 서버에서 추출한 이후 캐시합니다.
response = cached_session.get('https://docs.python.org/3/')
print(response.from_cache)  # False

# 두 번째는 ETag와 Last-Modified 값을 사용해 업데이트됐는지 확인합니다.
# 변경사항이 없는 경우에는 콘텐츠를 캐시에서 추출해서 사용하므로 빠른 처리가 가능합니다.
response = cached_session.get('https://docs.python.org/3/')
print(response.from_cache)  # True