[크롤링] 크롤링을 할 때 고려해야 하는 것들

안녕하세요 괴짜 개발자 namedboy 입니다. 😎
이번 포스팅에서는 데이터를 크롤링할 때 고려해야 하는 부분들에 관해서 얘기해보려고 해요.

요즘은 데이터를 다루는 일들이 많아지면서 데이터 크롤링이 개발자의 영역이라기보다는 일반인들도 조금만 배워서 실천해 볼 수 있을 정도로 크롤링에 대한 접근 난도가 굉장히 낮아진 느낌이에요.

물론 전문적으로 데이터를 쌓고 정리해야 하는 상황에서의 크롤링과 웹 페이지에서 원하는 데이터의 일부를 CSV 파일이나 TXT 파일로 만들기 위한 크롤링은 크게 다르겠지요.

어쨌든 크롤링이 들어가는 부분에서는 동일하니 결국 목적지는 비슷하리라 생각이 드네요.

그러면 크롤링을 할 때 고려해야 하는 부분들은 어떤 것들이 있을까요? 몇 가지를 살펴볼게요.

언어

크롤링을 하는데 어떤 언어를 쓸 것인가에 대한 부분이에요. 사실 이건 제 생각에 압도적으로 파이썬이라고 생각이 드는데 그 이유는 상대적으로 다른 언어보다 초보자가 배우기 쉬운 언어이고 성능은 강력하다고 느껴지기 때문이에요. 이러한 경험을 주는 것들은 파이썬에서 크롤링할 때 사용하는 라이브러리인 scrapy와 beautifulsoup가 크게 작용을 했다고 생각해요.

꼭 파이썬을 써야 하는 것은 아니고 Node 또는 Java도 크롤링을 할 수 있는 라이브러리들이 있으니 다른 언어로 하고 싶다면 살펴보면 좋을 것 같네요.

Java lib

Node lib

위의 링크들은 각각의 lib들의 링크입니다.
이외에도 많은 lib들이 존재하니 원하는 기능의 크롤러를 사용하시면 될 것 같습니다.

데이터

크롤링을 할 때 어떤 데이터를 가져올 것인지 정의하는 것도 정말 중요합니다.

원하는 데이터가 크면 클수록 크롤링할 때 고려해야 할 요소들이 많아지기 때문입니다. 크롤링을 할 때 데이터의 정확성 때문에 반복적으로 크롤링해야 하는 경우가 많은데 이런 상황에서는 최대한의 자동화를 해야 합니다. 그런 이유로 크롤링을 할 때는 내가 어떤 데이터를 가져올 것인지 명확하게 정의를 내리고 최대한 자동화를 거쳐야 힘들게 쏟은 에너지가 물거품이 되지 않게 됩니다.

지속성

마지막으로는 지속해서 가능하게 할 수 있는가입니다. 크롤링은 기본적으로 사람이 하지 않고 자동화 하므로 반복적으로 많은 요청을 보내게 됩니다. 동일한 URL에서 변숫값만 바꿔가며 수십 또는 수백 많게는 수천 개의 request를 날리는 거죠. 이게 너무 짧은 시간에 요청을 보내게 된다면 보통 악의적인 공격으로 판단하여 해당 IP를 차단하거나 웹 페이지의 URL을 변경하거나 request의 헤더 값을 보고 판단해서 에러 페이지로 전달해 버리기도 합니다. 어찌 보면 컴퓨터가 작업하는 것을 사람이 하는 것처럼 생각하도록 속여야 하죠. 그 때문에 지속해서 데이터를 가져오고자 한다면 최대한 사람인 척 동작하도록 설계를 해야 합니다.

앞서 얘기한 3가지도 중요하지만, 크롤링할 때 유의해야 하는 아주 큰 포인트가 하나 더 있습니다. 바로 법적인 문제가 없는지 체크하는 것이죠. 기본적으로 사이트에 올라가 있는 데이터는 해당 회사의 지적재산입니다. 정보 자체가 돈이 되는 지금 시대에서는 크롤링하는 것 자체만으로도 법적인 분쟁이 일어날 수 있다는 것이죠. 그렇기 때문에 학습을 위한 크롤링을 하는 것은 큰 문제가 되지 않지만, 서비스를 위해 데이터를 크롤링하는 것은 법적인 이슈가 없는지도 잘 살펴보아야 할 것 같습니다.

오늘은 크롤링을 할 때 고려해야 하는 부분들을 조금 살펴봤습니다.

앞으로 더 발전 가능성이 있는 기술인만큼 여러 고려할 내용을 확인해서 도움이 되셨으면 좋겠습니다.