2. BeautifulSoup
2-1. BeautifulSoup 개요
2-1-1. BeautifulSoup 이란
💡Beautiful Soup은 Python 기반의 HTML, XML 파일을 파싱(parsing)하여 데이터를 추출하는 라이브러리이다.
이미 다운로드된 HTML 문서를 파싱하여 DOM(Document Object Model) 트리를 생성하고, DOM 트리를 탐색하여 원하는 태그나 속성에 접근하고 데이터를 추출한다.
웹 페이지의 구조를 이해하고 필요한 데이터를 정제하여 추출하는 데 적합하다.
2-1-2. BeautifulSoup 장단점
- 장점
- 가볍고 사용법이 간단하다.
- HTML 구조에서 특정 태그나 속성에 쉽게 접근 가능하다.
- 빠른 파싱 속도를 제공한다.
- 단점
- 동적 웹 페이지(JavaScript 렌더링) 크롤링은 불가능하다.
- HTTP 요청을 별도로 작성해야 한다.
2-1-3. BeautifulSoup 한계
- JavaScript가 생성한 콘텐츠 처리 불가 (스크롤 및 동적 로딩 콘텐츠 제어 불가)
- BeautifulSoup은 서버에서 응답받은 정적 HTML만 처리할 수 있다.
- JavaScript로 동적으로 생성된 데이터는 Selenium 같은 브라우저 기반 도구가 필요하다.
- 브라우저 동작 제어 불가
- 페이지 이동, 버튼 클릭, 입력 및 폼 제출, 탭 및 창 관리 등 브라우저 상호작용은 BeautifulSoup으로 처리할 수 없다.
⇒ Beautiful Soup은 정적 데이터 추출에 강점이 있지만, 브라우저 제어는 Selenium과 같은 도구를 사용해야 한다.
따라서, 동적 웹 페이지를 다루거나 브라우저를 직접적으로 제어해야 한다면 Selenium을 추천한다.
하지만 단순 데이터 수집 작업에서는 Beautiful Soup이 속도와 효율 면에서 유리하다.
2-2. BeautifulSoup 주요 함수 및 메서드
- BeautifulSoup의 주요 내용은 Documents에서 자세하게 확인할 수 있다.
2-2-1. HTML 문서 파싱 및 초기화 관련
- BeautifulSoup(markup, parser): HTML/XML 데이터를 파싱하여 BeautifulSoup 객체를 생성한다.
- soup.prettify(): HTML 문서를 계층 구조로 보기 좋게 문자열로 반환한다.
- soup.encode(): 파싱된 데이터를 지정된 인코딩으로 반환한다.
- soup.decode(): 파싱된 데이터를 UTF-8로 디코딩한다.
- soup.original_encoding: HTML 문서의 원래 인코딩 정보를 반환한다.
2-2-2. 요소 탐색 관련
- soup.find(name, attrs, recursive): 조건에 맞는 첫 번째 태그를 반환한다.
- soup.find_all(name, attrs, limit, recursive): 조건에 맞는 모든 태그를 리스트로 반환한다.
- soup.select(css_selector): CSS 선택자로 요소를 찾는다.
- soup.select_one(css_selector): CSS 선택자로 찾은 첫 번째 요소를 반환한다.
- soup.find_parent(tag_name): 특정 태그의 부모 태그를 반환한다.
- soup.find_next_sibling(tag_name): 특정 태그의 바로 다음 형제 태그를 반환한다.
- soup.find_previous_sibling(tag_name): 특정 태그의 바로 이전 형제 태그를 반환한다.
2-2-3. 데이터 추출 및 조작 관련
- tag.text: 태그 안의 텍스트를 반환한다.
- tag.get(attribute): 태그의 특정 속성 값을 반환한다.
- tag.attrs: 태그의 모든 속성을 딕셔너리로 반환한다.
- tag.string: 태그 내의 단일 텍스트를 반환한다.
- tag.contents: 태그의 모든 하위 요소를 리스트로 반환한다.
- tag.clear(): 태그 내부의 내용을 모두 제거한다.
'Web Crawling > BeautifulSoup' 카테고리의 다른 글
정적 웹 페이지 스크래핑 - requests, BeautifulSoup 활용 (0) | 2025.02.23 |
---|