본문으로 바로가기
반응형

크롤링이 잘되었는지 확인하는 법

크롤링이 잘되었는지 안되었는지 확인하지 않으면, 어디서 무엇이 잘못되었는지 모를 수 있다.

이 때, requests의 정보를 활용하면 된다.

 

1. ok 사인이 나는 코드는 200번이다.

requests.codes.ok

 

2. status_code를 통해 현재 상태 정보를 알 수 있다.

 

resp.status_code
100 요청 계속
200 성공을 정상적으로 요청을 하고 데이터를 내려 받았을 때
300 사이트 주소가 변경되었을때
400 유저가 요청을 잘못한경우
ex ) 404 error : 없는 페이지 에러 (not found), 요청방법이 다를때
500 서버 문제

 

 

차단 방지하는 법

크롤링을 할 때에도 너무 기계적으로 빠르게 모아오면 차단을 당해 실패하는 경우가 있다.

 

time패키지를 불러와 실행시간을 늦춰줄 수 있다.

 

그리고 랜덤으로 난수를 생성하여 실행시간을 랜덤으로 적용해주면 차단을 방지할 수 있다.

import time

seed = np.random.randint(100)
np.random.seed(seed)
time_sleep = np.random.randint(5)
time.sleep(time_sleep)

 

 

일반적으로 크롤링 코드 진행에 위 두 방식을 모두 적용시킨다.

예시)

# 차단막는 코드, 랜덤으로 time.sleep 지정
data = []
for i in range(1,100):
    
    # 차단막는 코드, 랜덤으로 time.sleep 지정
    seed = np.random.randint(100)
    np.random.seed(seed)
    a = np.random.randint(5)
    time.sleep(a)
    
    # url 설정
    url = f'https://search.daum.net/search?w=tot&DA=LOT&rtmaxcoll=LOT&&q={i}%ED%9A%8C%EC%B0%A8%20%EB%A1%9C%EB%98%90'
    print(f'{i}회차 크롤링 중입니다.')
    # requests로 데이터 요청하기
    resp = requests.get(url)
    
    if resp.status_code == requests.codes.ok:
        
        # html로 변환
        html = BeautifulSoup(resp.text, 'html.parser')
        # 데이터 선별
        for ball in html.select('span.ball')[:6]:
            lotto.append(ball.text)
        
    else:
        print(f'{i}번째 요청이 잘 못 되었습니다.')
        pass # 넘겨준다.
              
print('크롤링 완료!!')
반응형