Python 웹 크롤러 도구 비교 및 사용 후기(Scrapy vs selenium vs Requests, urllib)

Key Kim

--

웹 크롤러 개발 언어로 Python을 선택했다면, 개발 효율성을 높혀줄 여러가지 라이브러리와 프레임워크가 있습니다.

그 중에서 제가 사용해본 Scrapy, selenium, beautifulsoup(requests or urllib) 에 대해, 개발하면서 느낀 각각의 장,단점을 공유하고자 합니다.

웹 크롤링 프로젝트를 진행하실 때 많은 도움이 되었으면 좋겠습니다.

requests or urllib(beautifulsoup)

beautifulsoup는 HTML, XML 파일의 정보를 추출해내는 python 라이브러리입니다.

이 방식은 python 내장 모듈인 requests 혹은 urllib을 이용해 HTML를 다운로드 받고, beautifulsoup로 데이터를 추출하는 방식입니다.

이 방식은 서버에서 HTML을 다운로드 받기때문에, 서버사이드렌더링을 사용하지 않는 SPA 사이트나, javascript 렌더링을 필요로하는 사이트들은 크롤링하기가 까다롭습니다.

하지만 사용하기 매우 쉽고, 심플합니다. 멀티프로세스나 멀티스레드를 사용하면 속도도 매우 빠릅니다.

  • 장점 — 쉬움, 심플함, 빠름 (멀티프로세스, 멀티 스레드 적용시 해당)
  • 단점 — javascript 렌더링이 필요한 사이트들을 크롤링하기 어려움. 병렬처리 로직을 별도로 작성하지 않으면 느린편.

selenium

Selenium은 웹 자동화 테스트 (버튼 클릭, 스크롤 조작 등등)에 사용되는 프레임워크입니다.

셀레니움을 이용한 크롤러는 웹 페이지에서 javascript 렌더링을 통해 생성되는 데이터들을 손쉽게 가져올 수 있습니다.

인터넷 브라우저를 통해 크롤링을 하는 개념이라, 실제 보여지는 웹페이지의 전부를 가져올 수 있고, 디버깅 방법또한 직관적입니다.

하지만 웹 브라우저를 실제로 실행시키는 방법이기 때문에 속도도 많이 느리고, 메모리도 상대적으로 많이 차지합니다.

멀티프로세스를 사용해서 여러 브라우저로 크롤링하도록 하면 속도를 일정부분 개선할 수 있습니다.

팁으로 셀레니움을 사용하실 때 Docker를 사용하시면 매우 편리합니다(특히 headless 모드로 크롤링할 때 리소스 정리가 매우 쉽습니다)

  • 장점 — 사용자가 보는 웹 페이지의 모든 정보를 가져올 수 있음, javascript rendering 기능 지원, 사용방법이 직관적이고 쉬움.
  • 단점 — 느림, 메모리를 많이 차지.

scrapy

Scrapy는 크롤링을 위해 개발된 프레임워크입니다.

미들웨어, 파이프라인, javascript renderer(splash), proxy, xpath, CLI 등 다양한 기능들과 플러그인들을 사용할 수 있습니다.

병렬처리, robots.txt 준수 여부, 다운로드 속도 제어등도 설정할 수 있습니다.

Scrapy로 개발된 크롤러를 올릴 수 있는 클라우드 서비스도 제공합니다.

(물론 유료입니다 $_$)

Django 와 같은 백엔드 서비스와 연동하기도 좋고, 플러그인도 다양해서 여러모로 만능인 프레임워크입니다.

문서화도 잘 되있고, 구조도 심플해서 동작 메커니즘만 파악하시면 크롤러에 날개를 달아줄 수 있는 프레임워크입니다.

scrapy를 django와 함께 사용하실 계획이시면, 아래 포스팅을 한번 읽어보시면 좋을 것 같습니다.

굳이 단점을 꼽자면 플러그인들이 호환이 잘 안되는 편입니다.

저같은 경우에는 javascript renderer 플러그인(scrapy-splash)과 proxy(scrapy-rotating-proxies) 플러그인이 서로 호환이 안되는 문제가 있었습니다.

관련된 이슈 링크

  • 장점 — 다양한 플러그인 보유, 훌륭한 커뮤니티와 문서화, 크롤링에 필요한 다양한 기능
  • 단점 — 플러그인들끼리 서로 호환이 안되는 경우가 있을 수 있음.

정리

저는 Requests, urllib + selenium 기반으로 개발하다가, proxy, http 재요청 기능등이 필요해서 scrapy를 사용하고 있습니다.

Scrapy를 찬양하는 글이 되버린 감이 있지만, 여러가지 옵션이 있으니 진행하시는 프로젝트에 적합한 도구를 선택하시는데 도움이 되었으면 좋겠습니다.

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

--

--

No responses yet

Write a response