반응형
크롤링이 잘되었는지 확인하는 법
크롤링이 잘되었는지 안되었는지 확인하지 않으면, 어디서 무엇이 잘못되었는지 모를 수 있다.
이 때, 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('크롤링 완료!!')
반응형
'Skills > Python' 카테고리의 다른 글
[Python] selenium 패키지를 활용한 크롤링 (1) | 2021.11.08 |
---|---|
[Python] API를 통해 크롤링하기 (0) | 2021.11.08 |
[Python] selenium 패키지 사용을 위한 chromedriver 설치 및 오류해결(Mac OS) (0) | 2021.11.08 |
[Python] 웹 페이지 크롤링 기초 (0) | 2021.11.08 |
[Python] 시각화 패키지 (0) | 2021.11.05 |