웹 스크래핑 - BeautifulSoup

yjbenkang·2024년 10월 8일

인터넷과 웹

두 컴퓨터를 연결하는 네트워크의 탄생 -> 네트워크를 묶어 근거리 지역 (Local Area Network, LAN) 탄생 -> 범지구적으로 연결된 네트워크 Inter Network - 인터넷 탄생 -> 정보교환이 이뤄지는 플랫폼, 이 인터넷에서 정보를 교환할 수 있는 환경을 만들어 볼까해서 WWW(World Wide Web, 줄여서 Web) 탄생

웹상에서는 어떻게 정보를 주고받을까 ?

웹에서 정보 주고받기

정보를 요청하는 컴퓨터 : Client

정보를 제공하는 컴퓨터 : Server

  1. 클라이어언트가 서버에게 정보를 요청
  2. 요청에 대해서 서버가 작업을 수행
  3. 수행한 작업의 결과를 클라이언트에게 응답 "여기 있습니다!" or "엥 요청이 이상한데요.."

HTTP의 구조

Hypertext Transfer Protocol
클라이언트에서 서버로 정보를 요청하는 것을 HTTP 요청(Request)라고 한다.
요청된 정보에 대해 서버가 응답하는 것을 HTTP 응답(Response)라고 한다.

정확한 정보를 요청하기 위해서는 어떤정보가 필요할까?
HTTP는 요청/응답에 대한 정보를 담는 Head와 내용물인 Body로 나뉜다.


웹페이지와 HTML

웹 브라우저는 HTML 요청을 보내고, HTTP 응답에 담긴 HTML 문서를 우리가 보기 쉬운 형태로 화면을 그려주는 역할을 담당한다.

웹 페이지는 HTML이라는 형식으로 되어있고, 웹브라우저는 우리가 HTTP 요청을 보내고, 응답받은 HTML 코드를 렌더링해준다.

이 웹브라우저의 역할을 코드로 대신 해볼 수 있다.

HTML의 구조

<!DOCTYPE html>을 통해 HTML5임을 명시한다.
가장 바깥에 <html> 태그로 감싸져있다.
Html 코드는 Head와 Body로 나눌 수 있다.
Head는 문서에 대한 정보 (제목, 언어 등)을 작성한다.
Body는 문서의 내용 (글, 이미지, 동영상 등)으로 이루어져있다.

→ 이렇게 HTML은 여러 태그로 감싼 요소의 집합으로 이루어져있다.


나의 첫 HTTP 통신 코드




웹 스크래핑, 웹 크롤링

웹 스크래핑

웹 페이지들로부터 우리가 원하는 정보를 추출
특정한 목적으로 특정 웹 페이지에서 데이터를 추출하는 것 - 데이터 추출
ex) 날씨 데이터 가져오기, 주식 데이터 가져오기 등

웹 크롤링

크롤러를 이용해 웹 페이지의 정보를 인덱싱
URL을 타고 다니며 반복적으로 데이터를 가져오는 과정 - 데이터 색인
ex) 검색 엔진의 웹 크롤러

올바르게 HTTP 요청하기 위해 고려해야 할 것

웹 스크래핑/크롤링을 통해 어떤 목적을 달성하고자 하는가?
나의 웹 스크래핑/크롤링이 서버에 영향을 미치지 않는가?

robots.txt 이용하기


웹브라우저가 HTML을 다루는 방법

브라우저는 어떻게 이 문서를 오른쪽과 같은 예쁜 페이지로 만들 수 있을까?
브라우저의 렌더링 엔진은 웹 문서를 로드한 후, 파싱을 진행. 이를 DOM(Document Object Model)이라고 한다.
DOM으로 만드는 이유는 각 노드를 객체로 생각하면 문서를 더욱 편리하게 관리할 수 있기 때문이다.
원하는 요소를 동적으로 변경해줄 수 있고, 원하는 요소를 쉽게 찾을 수 있다.

브라우저는 HTML을 파싱해서 DOM을 생성한다.
이를 바탕으로 요소를 변경하거나 찾을 수 있었다
파이썬으로 HTML을 분석하는 HTML Parser 필요.


HTML을 분석해주는 BeautifulSoup




원하는 요소가져오기 1



HTML의 Locator로 원하는 요소 찾기



원하는 요소 가져오기 2


동적 웹페이지와의 만남 (Selenium)

정적/동적 웹사이트

정적 웹사이트는 HTML 내용이 고정적이며, 동적 웹사이트는 HTML 내용이 변한다.
동적 웹사이트는 응답 후 HTML이 렌더링될 때까지의 지연 시간이 존재한다.

동기 처리는 요청에 따른 응답을 기다린다
비동기 처리는 요청에 따른 응답을 기다리지 않는다
비동기 처리는 상황에 따라 데이터가 완전하지 않은 경우가 있고, 키보드/마우스 입력/클릭 등을 requests로는 진행하기 어렵다.

웹 브라우저를 파이썬으로 조작하는 전략 (응답을 받은 후 시간을 지연시켜서 데이터가 완전해진 시점에 시도하기 등 selenium 이용)

profile
keep growing

0개의 댓글