두 컴퓨터를 연결하는 네트워크의 탄생 -> 네트워크를 묶어 근거리 지역 (Local Area Network, LAN) 탄생 -> 범지구적으로 연결된 네트워크 Inter Network - 인터넷 탄생 -> 정보교환이 이뤄지는 플랫폼, 이 인터넷에서 정보를 교환할 수 있는 환경을 만들어 볼까해서 WWW(World Wide Web, 줄여서 Web) 탄생
정보를 요청하는 컴퓨터 : Client
정보를 제공하는 컴퓨터 : Server
Hypertext Transfer Protocol
클라이언트에서 서버로 정보를 요청하는 것을 HTTP 요청(Request)라고 한다.
요청된 정보에 대해 서버가 응답하는 것을 HTTP 응답(Response)라고 한다.
정확한 정보를 요청하기 위해서는 어떤정보가 필요할까?
HTTP는 요청/응답에 대한 정보를 담는 Head와 내용물인 Body로 나뉜다.
웹 브라우저는 HTML 요청을 보내고, HTTP 응답에 담긴 HTML 문서를 우리가 보기 쉬운 형태로 화면을 그려주는 역할을 담당한다.
웹 페이지는 HTML이라는 형식으로 되어있고, 웹브라우저는 우리가 HTTP 요청을 보내고, 응답받은 HTML 코드를 렌더링해준다.
이 웹브라우저의 역할을 코드로 대신 해볼 수 있다.
<!DOCTYPE html>을 통해 HTML5임을 명시한다.
가장 바깥에 <html> 태그로 감싸져있다.
Html 코드는 Head와 Body로 나눌 수 있다.
Head는 문서에 대한 정보 (제목, 언어 등)을 작성한다.
Body는 문서의 내용 (글, 이미지, 동영상 등)으로 이루어져있다.
→ 이렇게 HTML은 여러 태그로 감싼 요소의 집합으로 이루어져있다.



웹 페이지들로부터 우리가 원하는 정보를 추출
특정한 목적으로 특정 웹 페이지에서 데이터를 추출하는 것 - 데이터 추출
ex) 날씨 데이터 가져오기, 주식 데이터 가져오기 등
크롤러를 이용해 웹 페이지의 정보를 인덱싱
URL을 타고 다니며 반복적으로 데이터를 가져오는 과정 - 데이터 색인
ex) 검색 엔진의 웹 크롤러
웹 스크래핑/크롤링을 통해 어떤 목적을 달성하고자 하는가?
나의 웹 스크래핑/크롤링이 서버에 영향을 미치지 않는가?
robots.txt 이용하기


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









정적 웹사이트는 HTML 내용이 고정적이며, 동적 웹사이트는 HTML 내용이 변한다.
동적 웹사이트는 응답 후 HTML이 렌더링될 때까지의 지연 시간이 존재한다.
동기 처리는 요청에 따른 응답을 기다린다
비동기 처리는 요청에 따른 응답을 기다리지 않는다
비동기 처리는 상황에 따라 데이터가 완전하지 않은 경우가 있고, 키보드/마우스 입력/클릭 등을 requests로는 진행하기 어렵다.
웹 브라우저를 파이썬으로 조작하는 전략 (응답을 받은 후 시간을 지연시켜서 데이터가 완전해진 시점에 시도하기 등 selenium 이용)