[Python] URL 라이브러리 403 에러 해결하기 (urllib/requests)
2024. 11. 14. 21:26ㆍPython
서론
안녕하세요! 오늘은 웹 크롤링을 하다 보면 자주 마주치게 되는 403 에러에 대해 이야기해보려고 합니다. 특히 Python의 urllib이나 requests를 사용할 때 자주 발생하는데요, 이 문제를 어떻게 해결할 수 있는지 알아보겠습니다.
무엇이 문제일까?
403 에러가 발생하는 주된 이유는 웹사이트에서 봇이나 자동화된 접근을 차단하기 때문입니다. 특히 다음과 같은 경우에 자주 발생합니다:
- 기본 헤더로만 접근할 때
- 접근 패턴이 봇처럼 보일 때
- 특정 라이브러리의 시그니처가 감지될 때
해결 방법 살펴보기
1. 다양한 헤더 시도하기
import requests
# 여러 가지 헤더를 준비
headers_1 = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
}
headers_2 = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Safari/605.1.15'
}
try:
# 첫 번째 헤더로 시도
response = requests.get('https://example.com', headers=headers_1)
print("성공!")
except:
# 실패하면 두 번째 헤더로 시도
response = requests.get('https://example.com', headers=headers_2)
2. 가짜 헤더 생성하기
import random
# User-Agent 목록
user_agents = [
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) ...',
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) ...',
'Mozilla/5.0 (iPad; CPU OS 12_2 like Mac OS X) ...'
]
headers = {
'User-Agent': random.choice(user_agents),
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Accept-Language': 'ko-KR,ko;q=0.8,en-US;q=0.5,en;q=0.3',
}
3. 동적 크롤링 시도하기
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
# Selenium 설정
chrome_options = Options()
chrome_options.add_argument('--headless') # 헤드리스 모드
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')
# 브라우저 실행
driver = webdriver.Chrome(options=chrome_options)
driver.get('https://example.com')
# 페이지 내용 가져오기
content = driver.page_source
driver.quit()
4. HTML 직접 파싱하기 (마지막 수단)
from bs4 import BeautifulSoup
# HTML 문자열 (직접 브라우저에서 복사한 HTML)
html_content = """
<html>
<body>
<div class="content">
원하는 내용
</div>
</body>
</html>
"""
# BeautifulSoup으로 파싱
soup = BeautifulSoup(html_content, 'html.parser')
content = soup.find('div', class_='content')
주의할 점
- 웹사이트의 robots.txt를 반드시 확인하세요.
- 과도한 요청은 피해야 합니다.
- 웹사이트의 이용약관을 확인하세요.
- 필요한 경우 해당 웹사이트 관리자에게 허가를 받으세요.
마치며
403 에러는 크롤링을 하다 보면 정말 자주 마주치게 되는 문제인데요, 위의 방법들을 순차적으로 시도해보면 대부분의 경우 해결할 수 있습니다. 다만, 웹사이트의 정책과 규칙을 준수하면서 크롤링하는 것이 중요합니다.
다음에는 또 다른 크롤링 팁으로 찾아뵙도록 하겠습니다. 감사합니다! 😊
'Python' 카테고리의 다른 글
[Langchain] Passthrough를 활용한 간단한 Chain 구성하기 (1) | 2024.11.14 |
---|---|
[Langchain] FastAPI에서 LLM Agent를 활용한 Response Streaming (1) | 2024.10.31 |
python - pandas apply를 사용한 데이터 수정 with lambda (0) | 2024.03.12 |
Python - Anaconda를 활용한 가상환경 생성 (0) | 2022.06.15 |
Python - bytes를 String으로 변환하는 방법 (0) | 2022.06.15 |