본문 바로가기

dev course - DE/TIL

[데브코스] TIL 7일차

웹 스크래핑 기초 - HTTP(인터넷 속의 약속)
인터넷과 웹

  • 인터넷의 탄생
    - 컴퓨터 한대 → 컴퓨터 두대 이상을 연결하는 네트워크(Network) 탄생 → 네트워크를 묶어 근거리 지역 네트워크(Local Area Network, LAN) 탄생 → 범지구적으로 연결된 네트워크(Inter Network, Internet) 탄생!

  • 웹(WWW, World Wide Web)
    - 인터넷에서 정보를 교환하기 위한 시스템

웹에서 정보 주고받기

  • 우리가 신발 가게에 가서 신발을 사듯, 컴퓨터도 동일하게 동작함
  • 클라이언트 - 정보를 요청, 서버 - 정보를 제공

 

HTTP(HyperText Transfer Protocol)

  • HTTP Request : 클라이언트가 서버에게 정보를 요청
  • HTTP Response : 서버가 클라이언트에게 정보를 제공
  • 요청/응답에 대한 정보를 담는 Head와 내용물인 Body로 나뉨

 

 

 

웹 스크래핑 기초 - 웹 페이지와 HTML

웹 페이지와 웹 사이트

  • 웹 페이지 - 웹 속에 있는 문서 하나
  • 웹 사이트 - 웹 페이지의 모음은 웹 사이트
  • 웹 브라우저는 HTML Request를 보내고, HTTP Response에 담긴 HTML 문서를 우리가 보기 쉬운 형태로 화면에 그려주는 역할을 담당함

 

HTML(HyperText Markup Language)의 구조

<!DOCTYPE html>
<html>
    <head>
    	<title>Example Document></title>
    </head>
    
    <body>
    	<h1>Hello World!</h1>
        <p>My name is Mussg!</p>
    </body>
</html>

 

 

 

웹 스크래핑 기초 - 나의 첫 HTTP 통신 코드

Python을이용해 HTTP 통신하기

  • requests
    - Python을 통해 간단히 HTTP 통신을 진행할 수 있는 라이브러리
  • 정보를 달라고 요청하기, GET
## requests 라이브러리를 불러온 후, NAVER의 홈 페이지를 요청한 후 응답 받아보기
import requests

res = requests.get("https://www.naver.com")

# Header를 확인해봅시다 : .headers
res.headers

# Body를 텍스트 형태로 확인해봅시다 : .text
res.text[:1000]

 

  • 정보 갱신을 요청하기, POST
## payload와 함께 POST를 보내봅시다 : requests.post()
payload = {"name": "Hello", "age": 13}

res = requests.post("https://webhook.site/7f36abe7-5efe-4396-a59f-bd37046601ab", payload)

# 상태 코드(status code)를 확인해봅시다 : .status_code
res.status_code

 

 

 

 

웹 스크래핑 기초 - 윤리적으로 웹 스크래핑/크롤링 진행하기

웹 스크래핑과 웹 크롤링

  • 웹 스크래핑
    - 핵심은 '추출'
    - 웹 페이지들로부터 우리가 원하는 정보를 추출하는 것

  • 웹 크롤링
    - 핵심은 '인덱싱'
    - 크롤러를 이용해 웹 페이지의 정보를 인덱싱

 

올바르게 HTTP 요청하기

  • 두 가지 고려 사항
    - 어떤 목적을 달성하고자 하는가?
    - 나의 웹 스크래핑/크롤링이 서버에 영향을 미치는가?

  • robots.txt
    - 웹 사이트 및 웹 페이지를 수집하는 로봇들의 무단 접근을 방지하기 위해 만들어진 로봇 배제 표준(robots exclusion standard)이자 국제 권고안
    - 브라우저에게 스팸 봇이 아닌 사람이라는 것을 알려주며, 이때 브라우저에게 전달하는 것이 user agent 정보임
    - user agent는 요청을 보내는 것의 주체를 나타내는 프로그램으로 웹 맥락에서는 브라우저, 웹 페이지를 수집하는 봇, 다운로드 관리자, 웹에 접근하는 다른 앱 모두 user agent
    - 웹 서버에 요청할 때 user agent는 HTTP header에 내 브라우저 정보를 전달하면 웹 서버가 나를 진짜 사용자로 인식할 수 있게함
    - 'User-agent' : 규칙이 적용되는 대상 사용자 에이전트. 'Disallow': 크롤링 금지할 웹 페이지. 'Allow': 크롤링 허용할 웹 페이지
# requests 모듈을 불러온 후, 다음 웹사이트에 대한 robots.txt 정책을 확인해봅시다.
# https://www.naver.com

import requests
res = requests.get("https://www.naver.com/robots.txt")
print(res.text)

 

  • 웹 스크래핑 시 원칙
    - 요청하고자 하는 서버에 과도한 부하를 주지 않기
    - 가져온 정보 사용 시 저작권과 데이터베이스권에 위배되지 않는지 주의하기

 

 

웹 스크래핑 기초 - 웹 브라우저가 HTML을 다루는 방법
DOM(Document Object Model)

  • 브라우저는 어떻게 HTML 문서를 예쁜 페이지로 만들 수 있을까?
    - 브라우저 안에는 렌더링 엔진이 존재하며, 이 엔진이 웹 문서를 로드하고 파싱을 진행

 

브라우저에 대한 넓고 얕은 지식

[출처] 프로그래머스 강의

  • DOM은 실제로 아주 복잡함
    - 각각의 네모를 객체처럼 가져옴. 객체 = 어떤 성질과 쓸 수 있는 메서드가 있음

  • 브라우저는 렌더링해서 DOM을 생성한 후 DOM manipulation(DOM 조종)을 할 수 있음
  • DOM을 다루는 예시
    - DOM Tree를 순회해 특정 원소 추가 가능
    - DOM Tree를 순회해 특정 원소 찾기 가능
  • 브라우저는 왜 HTML을 DOM으로 바꿀까?
    - 원하는 요소를 동적으로 변경 가능
    - 원하는 요소를 쉽게 찾을 수 있음

 

파이썬으로도 HTML 분석하고 싶어! → HTML parser가 필요해! 

'dev course - DE > TIL' 카테고리의 다른 글

[데브코스] TIL 9일차  (0) 2024.04.04
[데브코스] TIL 8일차  (0) 2024.04.03
[데브코스] TIL 6일차  (0) 2024.04.01
[데브코스] TIL 5일차  (1) 2024.03.29
[데브코스] TIL 4일차  (0) 2024.03.28