인스타그램 크롤링(스크래핑)을 진행할 때 스크래핑 횟수는 매우 중요한 요소입니다. 과도한 요청은 계정 차단, IP 차단, 그리고 법적 문제를 초래할 수 있으므로 주의가 필요합니다. 아래는 스크래핑 횟수 설정 시 고려할 사항입니다.
1. 스크래핑 횟수 가이드라인
시간당 요청 횟수: 인스타그램은 계정 및 IP를 기준으로 요청 수를 제한합니다. 일반적으로 시간당 100~200개의 요청을 넘기지 않도록 설정하는 것이 안전합니다.
일일 요청 횟수: 하루에 약 1000~2000개의 요청으로 제한하는 것이 적절합니다. 공식 API가 아닌 크롤링에서는 더 적게 요청하는 것이 안전합니다.
2. 요청 간 간격 설정
지연 시간 추가: 요청 사이에 2~5초의 랜덤 딜레이를 추가하여 인간의 브라우징 행동과 유사하게 보이도록 설정합니다.
작업 속도 분산: 한 번에 많은 데이터를 요청하지 말고, 일정한 간격으로 크롤링 작업을 나누어 수행합니다.
3. IP 및 계정 사용 전략
프록시 IP 사용:
동일한 IP로 요청을 계속하면 서버가 비정상적인 활동으로 간주할 가능성이 높습니다.
여러 IP를 활용하여 요청을 분산하면 스크래핑 횟수를 늘릴 수 있습니다.
다중 계정 활용:
여러 계정을 사용하여 각 계정의 요청 수를 분산시킵니다.
각 계정의 요청 횟수를 하루에 100~200회로 제한하는 것이 좋습니다.
4. API를 사용하는 경우
인스타그램의 공식 Graph API를 사용하면 더 많은 요청을 처리할 수 있으며, 기본적으로 하루에 약 200개의 요청 제한이 있습니다. (요청량은 API 사용량에 따라 확장 가능)
5. 문제 발생 시 대처
IP 차단 방지:
IP가 차단되었다면 프록시나 VPN을 사용하여 IP를 변경합니다.
차단된 IP는 일정 시간(24~48시간) 동안 사용하지 마세요.
계정 차단 방지:
로그아웃 후 일정 시간 동안 계정을 사용하지 않도록 합니다.
스크래핑 횟수가 적은 계정을 사용하거나 새 계정을 생성하여 대체합니다.
6. 안전한 크롤링을 위한 팁
작업량 테스트: 소규모 데이터를 대상으로 테스트한 후, 작업량을 점진적으로 늘립니다.
스크래핑 모니터링: 요청 성공률, 실패율, 차단 여부를 지속적으로 확인하며 작업을 조정합니다.
예시: 스크래핑 요청 설정
import time
import random
import requests
url = "https://www.instagram.com/some-profile/"
headers = {"User-Agent": "Your User Agent"}
for _ in range(100): # 하루 최대 100회 요청
response = requests.get(url, headers=headers)
if response.status_code == 200:
print("Success!")
time.sleep(random.uniform(2, 5)) # 2~5초 랜덤 딜레이
결론
스크래핑 횟수는 계정과 IP 상태, 크롤링 방식에 따라 달라질 수 있습니다. 최대한 안전하게 작업하려면 요청 횟수를 적절히 제한하고, 정상적인 API 사용을 우선적으로 고려하는 것이 좋습니다.