# 파이썬에서의 웹 스크래핑 - 완벽 가이드

> Clean Markdown view of GeekNews topic #13458. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=13458](https://news.hada.io/topic?id=13458)
- GeekNews Markdown: [https://news.hada.io/topic/13458.md](https://news.hada.io/topic/13458.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2024-02-21T09:57:49+09:00
- Updated: 2024-02-21T09:57:49+09:00
- Original source: [proxiesapi.com](https://proxiesapi.com/articles/web-scraping-in-python-the-complete-guide)
- Points: 41
- Comments: 5

## Topic Body

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

## Comments



### Comment 23294

- Author: yangeok
- Created: 2024-02-26T09:39:13+09:00
- Points: 2

javascript 렌더링은 playwright 갑입니다. 언어 지원 폭이 되게 넓더라구요.  
  
scrapy하고 붙여쓰면 시너지가 있을듯 하네요.

### Comment 23212

- Author: ikbzbcg15
- Created: 2024-02-21T12:50:00+09:00
- Points: 1

에이 요즘같으면 playwright 써야지

### Comment 23208

- Author: bandoche
- Created: 2024-02-21T10:58:26+09:00
- Points: 1

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

### Comment 23203

- Author: neo
- Created: 2024-02-21T09:57:49+09:00
- Points: 1

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

### Comment 23205

- Author: xguru
- Created: 2024-02-21T10:31:45+09:00
- Points: 3
- Parent comment: 23203
- Depth: 1

이 댓글에서 중요한건   
> SaaS 회사들이 블로그 포스트에서 자신들의 제품을 홍보하는 것은 마케팅의 일부이지만, 초보자에게 처음으로 문제를 소개하면서 자신들의 제품을 해결책으로 제시하는 것은 항상 재미있음.  
  
요거네요. 항상 이런 글들은 마지막에 자신들의 제품 홍보가 들어가있다는 걸 염두에 두고 봐야합니다.  
반대로 말하면, 국내 업체들도 이런 방식은 기본적으로 써야한다고 생각합니다.
