2주차 수요일, 8일차 Today I Learned
웹 데이터 크롤 및 분석 (3)
: HTML parser - BeautifulSoup, 동적 웹 사이트에 대해서
✏️ 학습 내용
1. HTML을 분석해주는 BeautifulSoup
HTML Parser : BeautifulSoup4
# 설치
%pip install beautifulsoup4
import requests
from bs4 import BeautifulSoup # 대문자로 시작하면 보통 클래스
# BeautifulSoup 객체 만들기
res = requests.get("http://www.example.com") # http:// 포함!
soup = BeautifulSoup(res.text, "html.parser") # response의 body를 텍스트로 전달하고, html로 분석한다는 것을 명시
print(soup.prettify()) # 분석된 HTML 보기 편하게
# HTML의 특정 요소 가져오기
soup.title # title 가져오기
soup.head # head 가져오기
soup.body # body 가져오기
soup.find("h1") # h1 태그로 감싸진 요소 하나 가져오기
soup.find_all("p") # p 태그로 감싸진 요소들 가져오기
h1.name # 태그 이름 가져오기
h1.text # 태그 내용 가져오기
2. 원하는 요소 가져오기
가장 먼저 윈도우의 F12 혹은 맥의 커맨드+I로 개발자도구를 확인하여 스크래핑을 원하는 홈페이지를 확인한다.
하나의 태그를 스크래핑하는 것은 좋은 방법은 아니지만 가장 간단한 방법이기도 하다.
태그는 자신의 이름 뿐만 아니라 고유한 속성 또한 가질 수 있다. 이 중 id와 class는 Locator로서 특정 태그를 지칭하는 데에 사용된다. 이렇게 HTML의 Locator로 원하는 요소를 가져올 수 있다.
3. 동적 웹 페이지와의 만남
웹 페이지는 어떻게 생성되느냐에 따라 크게 2가지로 구분된다. HTML 내용이 고정된 정적 (static) 웹 사이트, HTML 내용이 변하는 동적 (dynamic) 웹 사이트가 있다. 예를 들어 회사 홈페이지처럼 내용이 잘 바뀌지 않는 웹 사이트는 정적 웹 사이트, 인스타그램처럼 시간에 따라 피드가 갱신되는 것은 동적 웹 사이트라고 할 수 있다. 정적 웹 사이트는 HTML 문서가 완전하게 파싱된다. 하지만 동적 웹 사이트는 응답 후 HTML이 렌더링 될 때까지의 지연시간이 존재하므로 바로 파싱하면 안 된다.
웹 브라우저에선 JavaScript라는 프로그래밍 언어가 동작한다. 이 자바스크립트는 비동기 처리를 통해서 필요한 데이터를 채운다. 동기 처리는 요청에 따른 응답을 기다린다. 즉, 렌더링 후 데이터 처리가 이루어진다. 비동기 처리는 요청에 따른 응답을 기다리지 않는다. 즉, 렌더링을 시켜놓고, 렌더링 되는 와중에 데이터 처리를 한다. 동기 처리된 경우, HTML 로딩에 문제가 없다. 하지만 비동기 처리가 된 경우에는 상황에 따라서 데이터가 완전하지 않은 경우가 발생하게 된다.
requests로 요청 시 발생하는 문제들이 있다. 우선 위에서 살펴본 것과 같이 비동기 처리에 따른 문제이다. 이를 해결하기 위해서 정보를 추출하는 시간을 임의로 지연시키면 된다. 임의로 시간을 지연한 후, 데이터 처리가 끝난 후 정보를 가져오면 된다.
그리고 UI 상호 작용의 어려움이 존재한다. 키보드 입력, 마우스 클릭 등을 requests로는 진행하기 어렵다. 이를 해결하기 위해서 UI Action을 프로그래밍을 통해 명령을 내리면 된다. 웹 브라우저를 파이썬으로 조작하는 것이다. 이것을 가능하게 하는 것은 웹 브라우저를 자동화하는 라이브러리 Selenium 이다.
정적 웹 사이트 : HTML 내용이 고정적 (회사 홈페이지 등)
동적 웹 사이트 : HTML 내용이 변동적 (인스타그램, 유튜브 등)
동적 웹 사이트의 문제점 :
1. 응답 후 바로 정보를 추출하기 어렵다.
2. 다양한 상호작용이 존재한다. (키보드 입력, 마우스 클릭 등)
-> 해결 방안 : Selenium (정보 추출 시간 임의 지연, UI Action 프로그래밍)
💡 배운 점
https://archive.org/web : 예전의 웹페이지를 찾아볼 수 있다.
☁️ 소감
옛날 강의라서 그런지 사용할 수 없는 url을 바탕으로 실습을 진행하니까 내용을 확인하기 어려웠다. 스크래핑 관련된 내용은 크게 틀을 벗어나지 않아서 어렵지는 않지만, 행정적인 문제가 다소 아쉽다.
다음에는 드디어 셀레니움에 대해서 배운다. 이번 기회에 스크래핑/크롤링, 셀레니움에 대해서 제대로 정리하고싶다.
'Data Engineering > grepp 데브코스 : TIL' 카테고리의 다른 글
[TIL_2023.10.27] 웹 데이터 크롤 및 분석 (5) : 시각화 라이브러리 Seaborn으로 스크래핑 결과 시각화하기 (0) | 2023.10.27 |
---|---|
[TIL_2023.10.26] 웹 데이터 크롤 및 분석 (4) : 셀레니움 (Selenium) (0) | 2023.10.26 |
[TIL_2023.10.24] 웹 데이터 크롤 및 분석 (2) : HTTP, HTML 웹 스크래핑/크롤링 기초 (0) | 2023.10.24 |
[TIL_2023.10.23] 웹 데이터 크롤 및 분석 (1) : 기본 HTML/CSS/JS (1) | 2023.10.23 |
[TIL_2023.10.20] 자료구조와 알고리즘 (5) : 힙, DFS/BFS, 동적 계획법 대표 문제 풀이 (1) | 2023.10.20 |