웹 스크래핑 기초 - 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 |