1. BeautifulSoup
01. BeautifulSoup 개요
💡Beautiful Soup은 Python 기반의 HTML, XML 파일을 파싱(parsing)하여 데이터를 추출하는 라이브러리이다.
이미 다운로드된 HTML 문서를 파싱하여 DOM(Document Object Model) 트리를 생성하고, DOM 트리를 탐색하 여 원하는 태그나 속성에 접근하고 데이터를 추출한다. 웹 페이지의 구조를 이해하고 필요한 데이터를 정제해 추출하는 데 적합하다.
02. BeautifulSoup 장단점
- 장점
- 가볍고 사용법이 간단하다.
- HTML 구조에서 특정 태그나 속성에 쉽게 접근 가능하다.
- 빠른 파싱 속도를 제공한다.
- 단점
- 동적 웹 페이지(JavaScript 렌더링) 크롤링은 불가능하다.
- HTTP 요청을 별도로 작성해야 한다.
03. 한계
- JavaScript가 생성한 콘텐츠 처리 불가 (스크롤 및 동적 로딩 콘텐츠 제어 불가)
- BeautifulSoup은 서버에서 응답받은 정적 HTML만 처리할 수 있다.
- JavaScript로 동적으로 생성된 데이터는 Selenium 같은 브라우저 기반 도구가 필요하다.
- 브라우저 동작 제어 불가
- 페이지 이동, 버튼 클릭, 입력 및 폼 제출, 탭 및 창 관리 등 브라우저 상호작용은 BeautifulSoup으로 처리할 수 없다.
⇒ Beautiful Soup은 정적 데이터 추출에 강점이 있지만, 브라우저 제어는 Selenium과 같은 도구를 사용해야 한다.
따라서, 동적 웹 페이지를 다루거나 브라우저를 직접적으로 제어해야 한다면 Selenium을 추천한다.
하지만 단순 데이터 수집 작업에서는 Beautiful Soup이 속도와 효율 면에서 유리하다.
04. 주요 함수 및 메서드
Beautiful Soup Documentation — Beautiful Soup 4.13.0 documentation
Beautiful Soup Documentation Beautiful Soup is a Python library for pulling data out of HTML and XML files. It works with your favorite parser to provide idiomatic ways of navigating, searching, and modifying the parse tree. It commonly saves programmers h
www.crummy.com
(1) HTML 문서 파싱 및 초기화 관련
BeautifulSoup(markup, parser): HTML/XML 데이터를 파싱하여 BeautifulSoup 객체를 생성한다.
soup.prettify(): HTML 문서를 계층 구조로 보기 좋게 문자열로 반환한다.
soup.encode(): 파싱된 데이터를 지정된 인코딩으로 반환한다.
soup.decode(): 파싱된 데이터를 UTF-8로 디코딩한다.
soup.original_encoding: HTML 문서의 원래 인코딩 정보를 반환한다.
(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): 특정 태그의 바로 이전 형제 태그를 반환한다.
(3) 데이터 추출 및 조작 관련
tag.text: 태그 안의 텍스트를 반환한다.
tag.get(attribute): 태그의 특정 속성 값을 반환한다.
tag.attrs: 태그의 모든 속성을 딕셔너리로 반환한다.
tag.string: 태그 내의 단일 텍스트를 반환한다.
tag.contents: 태그의 모든 하위 요소를 리스트로 반환한다.
tag.clear(): 태그 내부의 내용을 모두 제거한다.
2. Selenium
1. Selenium 개요
💡 Selenium은 브라우저를 자동화하는 도구로, 웹 페이지의 JavaScript 렌더링까지 처리할 수 있다. 브라우저 드라이버를 사용하여 실제 브라우저(예: Chrome, Firefox)를 구동하여 웹 페이지를 로드하고, 스크립트를 통해 브라우저 내에서 클릭, 입력 등의 동작을 자동화한다. JavaScript 실행을 통해 생성된 콘텐츠도 로드하여 처리할 수 있다. 따라서 웹 페이지의 인터랙션과 동적 데이터를 크롤링하는 데 유용하다.
2. Selenium 장단점
- 장점
- JavaScript로 생성된 콘텐츠를 포함하여 모든 웹 요소에 접근 가능하다.
- 버튼 클릭, 입력 상자 채우기 등 브라우저 상호작용이 가능하다.
- 단점
- 속도가 느리고 시스템 자원을 많이 사용한다.
- 설치 및 초기 설정이 필요하다.
3. 주요 함수 및 메서드
https://selenium-python.readthedocs.io/
(1) 브라우저 제어 관련
webdriver.Chrome(executable_path): Chrome 브라우저 객체를 생성한다.
driver.get(url): 특정 URL로 이동한다.
driver.current_url: 현재 브라우저의 URL을 반환한다.
driver.refresh(): 현재 페이지를 새로고침한다.
driver.back(): 이전 페이지로 이동한다.
driver.forward(): 브라우저를 앞으로 이동시킨다.
driver.maximize_window() / driver.minimize_window(): 브라우저 창을 최대화/최소화한다. driver.execute_script("window.scrollTo(x, y)"): 특정 위치로 화면을 스크롤한다.
driver.switch_to.alert: 현재 브라우저에서 열려 있는 경고(alert) 창으로 전환한다.
alert.accept()/alert.dismiss(): 경고창의 확인/취소 버튼을 누른다.
driver.quit(): 모든 탭과 브라우저를 종료한다. (사용 후 자원 해제를 위해 반드시 호출해야 한다.)
driver.close(): 현재 활성화된 브라우저 탭만 닫는다.
(2) 요소 탐색 관련
driver.find_element(By.ID, value): 특정 ID로 요소를 찾는다.
driver.find_elements(By.CLASS_NAME, value): 특정 클래스 이름으로 모든 요소를 리스트로 반환한다. driver.find_element(By.TAG_NAME, value): 특정 태그 이름으로 요소를 찾는다. driver.find_element(By.LINK_TEXT, value): 링크 텍스트로 요소를 찾는다. driver.find_elements(By.CSS_SELECTOR, value): CSS 선택자로 요소들을 찾는다.
(3) 상호작용 및 입력 관련
element.click(): 특정 요소를 클릭한다.
element.send_keys(keys): 입력 상자에 텍스트를 입력한다.
element.clear(): 입력 상자 내용을 지운다.
element.submit(): 폼을 제출한다.
element.is_displayed(): 요소가 화면에 표시되는지 확인한다.
(4) JavaScript 및 동적 콘텐츠 제어
driver.execute_script(script): JavaScript를 실행한다.
driver.execute_async_script(script): 비동기 JavaScript를 실행한다.
driver.switch_to.frame(frame_reference): 특정 iframe으로 이동한다.
driver.switch_to.default_content(): iframe에서 기본 컨텐츠로 돌아온다.
'SKN > 03. Web Crawling' 카테고리의 다른 글
| 06. 크롤링 도구 개요 (0) | 2025.02.25 |
|---|---|
| 05. CSS 선택자 (0) | 2025.02.25 |
| 04. 브라우저 렌더링 동작 구조 (0) | 2025.02.25 |
| 03. 크롤링 데이터 저장 (0) | 2025.02.25 |
| 02. WEB의 구조 및 크롤링 (0) | 2025.02.25 |