GN⁺: Crawlee for Python – 웹 스크래핑 및 브라우저 자동화 라이브러리
(crawlee.dev)- Crawlee는 웹 스크래핑과 브라우저 자동화를 위한 Python 라이브러리
- 신뢰할 수 있는 크롤러를 빠르게 구축하는 데 도움이 됨
- AI, LLM, RAG, GPT를 위한 데이터 추출에 사용 가능
- 웹사이트에서 HTML, PDF, JPG, PNG 등의 파일을 다운로드할 수 있음
- BeautifulSoup, Playwright, 순수 HTTP와 함께 작동
- Headful 모드와 Headless 모드 모두 지원
- 프록시 로테이션 기능 제공
특징
- HTTP 및 Headless 브라우저 크롤링을 위한 통합 인터페이스 제공
- 사용 가능한 시스템 리소스를 기반으로 자동 병렬 크롤링 수행
- 타입 힌트를 사용하는 Python으로 작성되어 IDE 자동 완성 기능 향상 및 버그 감소
- 오류 발생 시 또는 차단될 때 자동 재시도 기능
- 통합 프록시 로테이션 및 세션 관리 기능
- 구성 가능한 요청 라우팅 - URL을 적절한 핸들러로 직접 전달
- 크롤링할 URL에 대한 영구 큐
- 테이블 형식 데이터와 파일 모두에 대한 플러그형 스토리지
- 강력한 오류 처리 기능
Scrapy와의 차이점
- Crawlee는 기본적으로 Headless 브라우저 크롤링(Playwright)을 지원함
- 간단하고 우아한 인터페이스 - 10줄 미만의 코드로 스크래퍼를 설정 가능
- 완전한 타입 힌트 적용
- 표준 Asyncio를 기반으로 함
GN⁺의 의견
- Crawlee는 웹 스크래핑과 크롤링을 위한 강력한 도구로 보임. 특히 Headless 브라우저 기반 크롤링을 기본적으로 지원하는 점이 큰 장점으로 생각됨.
- 간단한 인터페이스와 적은 코드량으로 크롤러를 만들 수 있어 생산성이 높아 보임. 또한 타입 힌트를 적극 활용하여 개발 경험이 향상되고 오류 발생 가능성이 낮아짐.
- 데이터 추출을 위해 크롤링이 필요한 프로젝트라면 Crawlee를 적극 고려해 볼 만함. 특히 JavaScript 렌더링이 필요한 웹 페이지를 크롤링해야 한다면 PlaywrightCrawler가 유용할 것으로 보임.
- 다만 매우 대규모의 크롤링이 필요하거나 실시간성이 중요한 경우에는 분산 크롤링을 지원하는 Scrapy나 다른 도구를 사용하는 것이 나을 수 있음.
- 크롤링 정책이나 법적 이슈에 대해서도 충분히 검토한 후 사용하는 것이 바람직해 보임.
Hacker News 의견
-
기존 기능을 문서화하는 것이 중요함. 아무리 훌륭한 웹 스크래핑 플랫폼이라도 사용자만 이해할 수 있으면 소용없음
- 예를 들어,
tiered_proxy_urls: list[list[str]] | None = None
의 의미를 이해하기 어려움 - 예제는 .csv, .xlsx 테이블 등 모든 데이터를 찾아 다운로드하는 방법을 보여줘야 함
- 단순히 텍스트를 가져오고 URL을 검색하는 것은 누구나 할 수 있음
- 1000개의 다른 항목을 파싱하고 다른 엔드포인트를 통해 3-5개의 항목을 얻는 예제가 필요함
- 이 도구가 프레임워크인지 자동화 도구인지 명확하지 않음
- 웹 스크래핑 옵트아웃 프로토콜(예: Robots.txt, HTTP 및 콘텐츠 태그)을 지원하는지 궁금함. 특히 EU의 DSM 지침 이후 중요해짐
- 예를 들어,
-
Apify/Crawlee에 감사함. 오랜 Node.js 사용자로서 이 라이브러리가 가장 잘 작동했음
-
프로젝트를 위해 스택을 찾다가 Crawlee를 발견함. Python 라이브러리를 원했지만 Typescript로 Crawlee를 사용하여 일주일 만에 프로젝트를 완료함
- API가 지금까지 사용한 어떤 Python 스크래핑 API보다 훨씬 나음
- Playwright와의 통합으로 프로그래밍 경험이 매우 편리해짐
- 프론트엔드 렌더링 웹사이트와 수정된 XHR 응답을 캡처하는 작업이 잘 작동함
- Apify 플랫폼을 사용하여 확장할 계획임
-
Scrapy와 어떻게 다른지 궁금함
-
다른 라이브러리에서 전환할 이유가 무엇인지 궁금함. 자체 크롤러를 구축했지만 특별히 독특한 점을 찾지 못함
-
모던 Python 코드가 멋져 보임
- 예제 코드에서
const data = await crawler.get_data()
는 Javascript처럼 보임. 언더스코어가 빠진 것 같음
- 예제 코드에서
-
테스트 케이스에서 더 많은 코드 스니펫을 문서화 예제로 가져오는 것을 제안함. 좋은 작업임
-
스크래핑 도구는 언제나 환영받음. 개인 프로젝트에 사용해 볼 예정임. AI 덕분에 현재 스크래핑은 금광 시대의 삽을 파는 것과 같음