python/크롤링

[파이썬 크롤러] 나는 로봇이 아닙니다. header

끼발자 2021. 9. 9. 16:31
반응형

2021.07.21 - [python/크롤링] - [파이썬 크롤러] 웹 크롤러 만들기

 

이전 게시글에서 잠깐 언급했듯, 

각 사이트별로 robots.txt라는 항목이 존재한다.

 

왼쪽은 https://google.com/robots.txt 의 결과이다.

간단하게 Allow 는 크롤링 허용, Disallow는 허용하지 않는다는 의미인데,

무엇을 허용하고 허용하지 않는다는 말일까?

https://searchadvisor.naver.com/guide/seo-basic-robots

친절하게 설명되어있다.

 

구글은 크롤러에 상당히 엄격하다.

일부만 캡쳐했는데도 Disallow가 상당하고, User-agent 가 *

즉 모든 유저에 대해서 적용된다.

우리도 종종 구글에서 일정한 간격으로 비슷한 패턴을 가지고 검색하게되면

로봇으로 감지했다는 메세지가 나온다. 

 

모든 브라우저들은 Header에 User agent를 가지고있는데,

크롤러처럼 url정보만 가지고 요청하면 이 값이 비어있다.

Header에 User-Agent를 보고 어떤 환경에서 접근했는지 판단하는데, 이 값이 비어있으면

프로그램에서 온 요청이라 판단하고 블락시키는 경우가 생긴다.

그럼 이제 어떻게 해야할까?

 

Header에 값을 추가해주면 적어도 요청할 때 로봇이라고 입구컷 당하진 않을거다.

 

https://developers.whatismybrowser.com/useragents/explore/software_name/chrome/5

여기에 들어가서 본인에 맞는 User-Agent를 찾자.

 

 

 



 

 

 

 

 

 

자 User-Agent를 찾았으면 

headers = {
	"User-Agent" : " "}# 빈칸에 알맞는 유저에이전트를 입력하세요

를 추가해주고, 

 

request.get(url, headers = headers)

로 요청하면 한번에 짤당하진 않을거다.

 

 

 

이렇게 까지 해도 로봇이라고 판단하는 경우가 있다.

곰곰히 생각해보자.

기술의 발전으로 반복문을 통해 1부터 10만까지 출력하는데 0.45초밖에 안걸린다.

크롤러에 반복문을 넣어 여러 페이지를 탐색하거나, 데이터를 불러오게 만들었다고 생각해보자.

과연 사람이 1초에 10페이지를 넘기는게 가능할까?

놉.

이렇게 단시간에 많은 요청을 주면 서버 입장에서 트래픽 과부하가 걸리고, 이는 곧 비용으로 연결되니

달갑진 않을거다. 그래서 이런 경우에도 종종 벤 당하는 상황이 발생하는데,

이는 반복문이 끝날 때, 딜레이를 강제로 주면 해결된다.

 

time.sleep(0.3)

안에 숫자는 여러분 입맛대로 바꿔서 사용하자.

 

반응형