본문 바로가기
Scraping

[파이썬으로 웹스크래핑] 스크랩핑? 크롤링? 그게 뭘까?

by 돈민찌 2021. 8. 9.
반응형

파이썬에는 웹에 있는 데이터를 긁어올 때 쓸 수 있는 다양한 라이브러리/모듈/패키지(엄연히 다른 개념이지만 차이점을 다루지는 않을 것이고, 여기서는 라이브러리로 통일할 예정이다.)가 존재한다. 그래서 파이썬 크롤링/스크래핑을 구글링 해보면 다양한 글이 많다. 그런데 막상 관련된 책을 사보려고 하면 찾아보기 힘들다. 왜 그런 것일까? 또 어떻게 시작하면 좋을까?

1. 크롤링이 뭔데?

크롤링은 단어 그대로는 Crawl, 기어가다라는 뜻이다. 철권 같은 대전게임에서 상대방의 공격을 물흐르듯 피하기 위해 낙법을 사용해 구르는 것도 크롤링이라고 부르고, 군인이 철조망 등을 통과하기 위해 낮은 포복으로 기어가는 것, 수영장에서 보통 "자유형"하면 떠올리는 영법의 이름도 크롤이다(다리를 퍼덕이면서 물살을 손으로 빠르게 끌어당기듯 저어간다!). 마찬가지로 웹에서 여러가지 사이트를 탐험하듯(옛날 싸이월드에서 파도타기하듯이) 이동하며 데이터를 긁어모으는 모습에서 크롤링이라는 이름을 가지게 된 것이다!!

2. 크롤링. vs 스크래핑 ?? 차이점이 뭐야 ?? 크롤링이란 말이 더 그럴듯한데?

인터넷에 크롤러 만들기를 검색해 봤다면, 또 그 검색결과로 나올 글들을 내가 예상해보자면, 일부는 파이썬의 뷰티풀숲(BeautifulSoup4), 혹은 Scrapy나 Selenium 등을 이용해 특정 웹사이트의 데이터를 긁어오는 방법을 소개하고 있을 것이고, 어떤 글들은 자바스크립트를 이용해 사이트에 요청을 보내 그 응답 데이터를 다루는 방법을 소개할 것이다.  검색할 때 "파이썬으로"를 앞에 붙였다면 전자를, "자바스크립트로"를 붙였다면 후자를 만났을 것이다. 일단 결론부터 말하자면 "나만의 웹 크롤러 만들기╰(*°▽°*)╯" 등의 키워드로 소개되는 대부분의 크롤러는 엄연히 말하자면 크롤링이라고 부르기 힘든 것들이다. 확장성 있는 웹 크롤러에 대한 고민은 수많은 웹이 나타나고 그 웹사이트들을 한 곳에 모아둔 검색 시스템들이 나타나면서 그들이 오랫동안 고민하고 연구해 온 것들이고, 깊이 들어가기 위해 관련 논문들을 찾아본다면 수많은 수학적, 컴퓨터 공학적 공식들에 눈앞이 깜깜해질 것이다. 사실 나도 논문은 커녕 크롤링에 관련된 외국 블로그나 웹사이트 글만 읽어도 머리가 터지는 비전공자...데헷

어쨌든 결론적으로 웹크롤러란? baseURL(seedURL)을 받아, 그 url과 관련된 url들을 탐색하고, 또 그 url 들에서 또 다른 하이퍼링크들을 찾아내기를 반복하는 것이다.

문제를 납작하게 표현하자면, 여러분이 정보를 얻기 위해 몇개의 사이트를 드나들며, 그곳의 글과 이미지 등의 정보를 스크랩하는 것이 '스크래핑', 또 그것을 컴퓨터에게 맡기는 일이 웹스크래핑이라고 할 수 있을 것이고, 여러개의 선으로 하나의 면을 만들듯이 스크래핑을 할 때 모은 하이퍼링크들을 다시 기준점으로 삼아 더 많은 사이트들을 탐구하는 파도타기 같은 작업이 웹크롤링인 것이다.

이를 테면 네이버 사이트를 들어간다. 네이버의 다양한 서비스들과 메인 페이지에 뜨는 글과 기사들의 링크들은 해당 텍스트를 클릭하거나, 또는 소스보기 등을 통해 각 url을 쉽게 얻어올 수 있다. 그 url에 접속한다. 또다시 페이지에 엄청난 수의 링크가 뜰 것이다. 이것을 반복하면 당신이 수집하게 될 페이지(데이터)의 수는 한 단계 깊이 들어갈 때마다 제곱으로 커질 것이다. 심지어는 네이버 메인페이지를 들어간 페이지(예를 들어 네이버뉴스)페이지의 링크들 중에 다시 네이버 홈페이지로 가는 링크도 있을 것이다. 원점으로 돌아가는 바보같은 실수를 하지 않기 위해, 한번의 깊이를 들어갈 때마다 당신의 크롤러는 지금까지 얻어낸 url들을 기록해서 다시 그곳으로 돌아가지 않게 해야한다.

그런데 웹사이트의 url이라는 것이, 한 페이지에 들어가는데 한가지의 방법만이 있는 것이 아니다. 무슨 말이냐면, fragment와 query 등이 타겟 url에 주렁주렁 달려있을 수도 있고, 어떤 페이지는 접속하자마자 사용자를 다른 페이지로 보내버리는 경우도 있을 것이고, 하나의 웹페이지에 도메인을 여러개 가지고 있을 수도 있다. google.com과 google.co.kr이 같은 페이지를 보여주는 것처럼. 그렇다면 지금까지 밟아온 발자국들을 기억해 다시 그 곳을 밟지 않게 하려는 눈밭을 걷는 고양이 같은 마음가짐 만으로는 효율적인 크롤링을 할 수가 없다! 

 

아직도 코딩 안배웠어? 5만원 깎아줄께 형아만 믿어

 

그래서 크롤링이 누구보다 필요하고 그 기술의 차이가 기업의 생명과 직결되는 검색 포털사이트들은 엄청난 성능의 컴퓨터를 다수 보유하고 그것을 상시 가동한다. 그리고 그 컴퓨터들 사이에 데이터를 항상 공유해야 하니(얘가 방금 들어간 사이트를 쟤가 또 들어가면 안되잖아) 굉장한 기술이 필요하다. 

이러저러한 이유들로 웹크롤링과 웹스크래핑은 큰 차이가 있...다 하지만 대부분의 사용자들이 그것들의 차이를 인식하고 있지 않고, 간단한 스크래핑 프로그램 코드를 짜보려는 초보자에게 이런 얘기를 주절주절하는 것도 낭비라고 생각한다. 근데 나름 전문가라는 사람들이 그 얘기를 하고다니면 안되지... 또 이게 불법 합법의 경계가 모호하니까 공식적인 교육자료는 많이 드물어 어쩔 수 없이 블로그 글들을 찾아보면서 관련 지식을 습득하게 되는 면이 있다. 그러니까 비전공자들에게까지 굳이 왜 그런 단어를 쓰냐며 꼰대짓하기는 싫고.. 암튼 다르다는 것.

다음 글에서는 robots.txt에 대해 좀 얘기해볼...까 했는데 나라고 전문적인 지식이 있는 것은 아니니까 개발자 분들이 쓴 글을 여기에 첨부하고 다음 글 부터는 이만 본론으로 들어가볼까?

'웹 크롤러' 좀 그만 만들어라 by mowinckel

 

🖨 '웹 크롤러' 좀 그만 만들어라

아무튼 그만 만들어라.

velog.io

웹 크롤링과 아키텍쳐 by mowinckel

 

🚜 웹 크롤링과 아키텍쳐

👩🏻‍💻 웹 크롤러는 무엇이고 어떻게 만들지?

velog.io

나만의 웹 크롤러 만들기 by beomi

 

나만의 웹 크롤러 만들기 시리즈 · GitBook

No results matching ""

beomi.github.io

과거 네이버봇의 다양한 문제점과 일본진출 실패사례

 

네이버 일본검색 엔진, 정보 모으기는 성공할까

네이버 일본검색 엔진, 정보 모으기는 성공할까 nhn재팬 예티Yeti, 한국 홈피 수집 시작 日선 이미 네이버봇 악명 높아일부서는 차단 中 최대 검색엔진 바이두, 유사논란에 사과도

biz.chosun.com

 

반응형

댓글