Ruby 웹 스크래핑은 다양한 강력한 Gem을 기반으로 합니다. 주요 Gem은 다음과 같습니다:
- HTTP 요청:
    - Faraday: 미들웨어 지원을 통해 유연하고 확장 가능한 HTTP 클라이언트입니다. 기본 GET/POST 요청부터 사용자 정의 헤더, JSON 페이로드, Gzip 압축, 그리고 faraday-retryGem을 이용한 재시도 로직까지 구현할 수 있습니다.
- HTTParty: 간결하고 읽기 쉬운 HTTP 요청을 위한 Gem입니다.
 
- Faraday: 미들웨어 지원을 통해 유연하고 확장 가능한 HTTP 클라이언트입니다. 기본 GET/POST 요청부터 사용자 정의 헤더, JSON 페이로드, Gzip 압축, 그리고 
- HTML 파싱:
    - Nokogiri: HTML 및 XML 파싱의 표준으로, CSS 선택자와 XPath를 모두 지원하여 문서에서 특정 요소를 효율적으로 추출할 수 있습니다.
- Loofah: Nokogiri를 기반으로 HTML을 정리하고 소독하는 데 중점을 둡니다.
 
- 브라우저 자동화 및 동적 콘텐츠 처리:
    - Selenium: 실제 브라우저(Chrome, Firefox 등)를 제어하는 엔진입니다.
- Capybara: Selenium을 래핑하여 브라우저 자동화를 위한 간결하고 Ruby스러운 DSL을 제공합니다. 이를 통해 페이지 방문, 요소 클릭, 양식 채우기, JavaScript 실행 대기 등 사용자 상호작용을 시뮬레이션할 수 있습니다. 헤드리스 모드를 통해 UI 없이 브라우저를 실행하여 백그라운드 작업에 적합하며, 스크린샷 기능을 통해 디버깅을 용이하게 합니다.
- Watir: Selenium 위에 구축된 브라우저 자동화를 위한 깔끔한 API를 제공합니다.
 
튜토리얼은 프로젝트 설정부터 시작하여 bundle init과 touch scraper.rb로 기본 환경을 구축합니다. 이후 Faraday를 이용한 HTTP 요청 방법을 상세히 설명하고, example.com과 jsonplaceholder.typicode.com을 통해 GET/POST 요청 및 사용자 정의를 시연합니다. Rotten Tomatoes 웹사이트를 예시로 Nokogiri를 활용한 HTML 파싱 및 데이터 추출 방법을 다루며, CSS 선택자를 사용하여 영화 제목, 포스터 URL, 평점 등을 수집합니다.
웹 스크래핑 시 발생하는 안티 스크래핑(Anti-scraping) 기술에 대응하기 위해 ScrapingBee API와 같은 외부 서비스를 활용하는 방법을 소개합니다. 이 서비스는 프리미엄 프록시, 프록시 로테이션, 자동 재시도, JavaScript 렌더링 기능을 제공하여 웹사이트 차단을 우회하는 데 도움을 줍니다. 또한, faraday-retry Gem을 사용하여 네트워크 오류나 API 불안정성에 대비하는 재시도 로직을 추가하고, 추출된 데이터를 CSV 파일로 저장하는 방법을 설명하여 스크래퍼의 유용성을 높입니다.
마지막으로, Micro Center 웹사이트를 대상으로 헤드리스 Selenium과 Capybara를 활용한 실제 스크래퍼를 구축하는 과정을 상세히 안내합니다. 사용자의 검색어를 입력받아 검색 결과를 수집하고, 발견된 제품 페이지들을 병렬로 방문하여 제품명, 가격 등의 상세 정보를 추출합니다. 이 과정에서 여러 스레드에 Capybara 세션을 생성하고 스레드 안전한 큐를 사용하여 작업을 분배하며, 최종 데이터를 CSV 파일로 저장합니다. 이는 동적 웹 페이지와 대규모 스크래핑 작업에 대한 실용적인 해결책을 제시합니다.