크롤러 스터디

Sanghyeop Lee·2023년 1월 21일
post-thumbnail

🌎 웹 크롤링 vs 웹 스크래핑

크롤링(crawling)은 '기다'라는 뜻의 crawl의 명사형인데, 소프트웨어와 같은 무언가가 인터넷을 돌아다니며 정보를 수집해 오는 작업을 의미하고, 그러한 작업을 하는 소프트웨어를 크롤러라고 한다. 월드와이드웹에서 웹페이지의 데이터를 '긁어' 오는 행위를 스크래이핑이라고도 하는데 대체로 유사한 의미이다.

  • 강태욱 변호사, 「크롤링」, 법률신문

이처럼 크롤링과 스크래핑이라는 용어는 비슷한 의미로 사용되고 구분도 모호하지만 굳이 나눠보자면 다음과 같이 나눠볼 수 있다.

  • 크롤링

    Seed URL 목록에서 시작해서 반복적으로 웹 링크를 찾고 가져오는 프로세스이다. 엄밀히 말하면 크롤링을 하려면 스크래핑(URL 추출)도 해야 한다.

    ex) 구글, 네이버 같은 검색 엔진들이 URL을 수집하고 인덱싱 하는 경우

  • 스크래핑

    웹 문서를 처리하고 그로부터 정보를 추출하는 프로세스이다. 스크래핑은 크롤링을 하지 않고도 할 수 있다.

    ex) 기상청 웹사이트의 페이지를 프로그램적으로 분석해 날씨 데이터만 로드해 다른 사이트나 프로그램에서 사용하는 경우


💻 대표적인 라이브러리, 프레임워크

뷰티풀숩(Beautiful Soup)

  • HTML과 XML 문서들을 분석하고 필요한 데이터를 추출하기 위한 파이썬 라이브러리

셀레니움(Selenium)

  • 브라우저를 자동화 해주는 프레임워크
  • 크롤링을 하다보면 무엇인가 입력하거나 특정 버튼을 눌러야 하는 상황이 발생하는데 그런 작업을 자동화할 수 있음
  • Java, Python, C#, JavaScript 등 다양한 언어를 지원

아파치 너치(Apache Nutch)

  • Java로 작성된 아파치 루씬(Apache Lucene) 기반의 오픈소스 웹 크롤러
    *아파치 루씬: Java로 작성된 오픈소스 검색 라이브러리
  • 특징으로는 높은 범위성(Scalability)확장성(Extensibility)이라고 공식 홈페이지에서 소개하고 있음

퍼펫티어(Puppeteer)

  • 구글 크롬 팀에서 공개한 Chrome/Chromium을 제어하기 위한 API를 제공하는 Node.js 라이브러리
  • 기본적으로 헤드리스 모드에서 작동하지만 Non-Headless 모드도 지원
셀레니움퍼펫티어
속도상대적으로 느림상대적으로 빠름
언어Java, Python, C#, Ruby, JS, KotlinJavaScript
브라우저크롬, 엣지, 파이어폭스, IE, 사파리크롬만 사용 가능
  • 셀레니움과 간단하게 비교해보았다.
  • 추가로 퍼펫티어는 실제로 크롬이기 때문에 차단하기 더 어렵다고 한다.

🤖 robots.txt

robots.txt 파일은 로봇 배제 표준에 따라 웹사이트를 방문하는 크롤러나 스크래퍼 등 자동화 소프트웨어에게 사이트의 어떤 부분을 방문하는 것이 허락되어 있는지 알려주는 방법이다.

robots.txt 파일은 사이트의 루트에 위치한다.
예를 들면 사이트의 주소가 example.com이라면 robots.txt 파일은 example.com/robots.txt에 있다.

naver.com/robots.txt를 브라우저에 입력하면 아래와 같이 네이버의 robots.txt 파일을 볼 수 있다.

User-agent: * # 이 규칙이 모든 User-agent에 적용됨
Disallow: / # 모든 경로에 대한 접근을 허용하지 않음
Allow : /$ # 첫 페이지에 대한 접근은 허용함

로봇 배제 표준은 권고안이므로 강제성은 없으나 이를 무시하고 크롤링을 하는 것은 권장되지 않는다.


참조

profile
개발자꿈나무

0개의 댓글