41P by neo 3달전 | favorite | 댓글 5개

Python 웹 스크래핑의 장점

  • 간단한 문법: 빠른 코딩 가능
  • 내장 라이브러리: urllib, lxml 등 스크래핑에 도움
  • 성숙한 스크래핑 라이브러리: Beautiful Soup, Scrapy 등
  • 범용성: 데이터 파이프라인 구축에 활용
  • 상호운용성: 다른 언어와의 통합 및 성능 중요 시 잘 작동

Python 웹 스크래핑 라이브러리

  • BeautifulSoup: HTML/XML 파싱, 유연한 탐색 및 검색
  • Scrapy: 빠르고 확장 가능, 미들웨어, 분산 크롤링 기능
  • Selenium: 브라우저 자동화, 자바스크립트 중심 사이트 처리
  • lxml: 매우 빠른 XML/HTML 파서
  • pyquery: jQuery 스타일 문법으로 HTML 요소 접근

스크래핑을 위한 준비사항

  • 가상 환경 설정 권장
  • 필요 라이브러리: Requests, BeautifulSoup, OS

스크래핑 대상 웹사이트 선택

  • 위키백과의 '강아지 품종 목록' 페이지 선택
  • 잘 구조화된 HTML, 다양한 데이터 필드, 이미지 포함

스크래핑 코드 작성

  • 필요한 라이브러리 임포트
  • User-Agent를 사용하여 브라우저로 가장
  • requests를 통해 HTML 페이지 다운로드 및 유효성 검사
  • BeautifulSoup으로 HTML 파싱
  • CSS 선택자로 데이터 추출
  • 이미지 다운로드 및 저장

웹 스크래핑 실제 도전 과제 및 모범 사례

  • 동적 콘텐츠 처리: Selenium 또는 Scrapy의 splash 통합 사용
  • 차단 방지: 요청 속도 조절, 브라우저 모방, 사용자 에이전트 및 프록시 회전
  • 속도 제한: 크롤 지연 존중, 프록시 사용, 요청 자동 조절
  • 복잡한 HTML 파싱: lxml과 같은 강력한 파서 사용, 선택자 강화

GN⁺의 의견

  • 가장 중요한 점: Python은 웹 스크래핑을 위한 강력한 언어로, 간단한 문법과 풍부한 라이브러리를 제공하여 다양한 규모의 웹 스크래핑 프로젝트에 적합함.
  • 흥미로운 이유: 웹 스크래핑은 데이터 수집 및 분석에 필수적인 기술이며, 이 가이드는 초급 소프트웨어 엔지니어가 실제 프로젝트에 적용할 수 있는 실용적인 지식을 제공함.
  • 도움이 되는 이유: 웹 스크래핑은 다양한 분야에서 응용될 수 있으며, 이 가이드는 실제 도전 과제와 모범 사례를 통해 실전에 강한 스크래핑 기술을 개발하는 데 도움을 줌.

javascript 렌더링은 playwright 갑입니다. 언어 지원 폭이 되게 넓더라구요.

scrapy하고 붙여쓰면 시너지가 있을듯 하네요.

에이 요즘같으면 playwright 써야지

실제로 스크래핑을 업무로 하다 보면 생각보다 번거로운 것은 브라우저 다루는 것(종종 오류 발생하는 chrome webdriver)과 차단(다양한 captcha)를 해결하는 것이 제일 크더라구요.

Hacker News 의견
  • 웹 크롤링과 스크래핑을 분리하는 것이 중요함. 크롤링은 URL을 찾고 HTML 콘텐츠를 가져오는 단계이고, 스크래핑은 HTML에서 구조화된 데이터를 추출하는 단계임. 두 단계를 분리하면 나중에 스크래퍼를 수정하여 기존 데이터에 빠르게 재적용할 수 있음.
  • 파이썬 웹 스크래핑 도구로 Playwright를 추천함. 매우 강력하고 잘 설계된 브라우저 자동화 도구로, 커맨드 라인에서 직접 웹 페이지를 스크래핑할 수 있는 shot-scraper CLI 도구를 사용함.
  • SaaS 회사들이 블로그 포스트에서 자신들의 제품을 홍보하는 것은 마케팅의 일부이지만, 초보자에게 처음으로 문제를 소개하면서 자신들의 제품을 해결책으로 제시하는 것은 항상 재미있음.
  • 웹사이트 스크래핑에 유용한 정보가 있는 <domain>/robots.txt를 확인하는 것과 HTML 태그 파싱 대신 구조화된 메타데이터를 통해 데이터를 추출하는 것이 도움이 될 수 있음. 이를 JSON으로 추출하는 라이브러리도 있음.
  • Python 대신 Node.js를 사용한 웹 스크래핑의 인기에 대해 의문을 제기함. npm에는 DOM 파싱을 위한 잘 만들어진 패키지들이 있고, 자바스크립트를 사용하기 때문에 더 자연스러운 DOM 기능을 사용할 수 있음.
  • pandas의 read_html을 사용하여 링크를 간단히 가져올 수 있음. 이를 통해 웹사이트의 테이블 데이터를 쉽게 추출할 수 있음.
  • 반복적이고 창의적이지 않은 웹 스크래핑 작업에 지쳐서 이제 LLM(Large Language Models)을 사용하여 전체 과정을 자동화하려고 시도 중임. LLM을 사용하여 웹사이트 변경에 적응하는 스크래퍼 코드를 생성하고 조정하는 것이 효율적임.
  • 파이썬 스크래핑에 대한 완벽한 가이드가 얼마나 많은지에 대한 의문을 제기함.
  • 현대적인 웹 스크래핑 설정에는 브라우저 에이전트가 필요하며, 주요 소셜 미디어 플랫폼이나 뉴욕타임즈 기사 등에서 데이터를 가져오기 위해서는 자체 도구를 구축해야 할 수도 있음.
  • 스크래핑 작업 중에 requests-cache 라이브러리가 도움이 됨. 이는 requests 라이브러리를 대체하지만 모든 응답을 SQLite 데이터베이스에 캐시하여 사이트에서 제한을 받을 때 스크립트를 조정하는 데 유용함.

이 댓글에서 중요한건

SaaS 회사들이 블로그 포스트에서 자신들의 제품을 홍보하는 것은 마케팅의 일부이지만, 초보자에게 처음으로 문제를 소개하면서 자신들의 제품을 해결책으로 제시하는 것은 항상 재미있음.

요거네요. 항상 이런 글들은 마지막에 자신들의 제품 홍보가 들어가있다는 걸 염두에 두고 봐야합니다.
반대로 말하면, 국내 업체들도 이런 방식은 기본적으로 써야한다고 생각합니다.