Miner

DAY 07 본문

데브코스

DAY 07

MineTime76 2023. 10. 24. 18:03

10/24 파이썬으로 웹 데이터를 크롤하고 분석하기(2)

 

1.  HTTP

인터넷과 웹

  • 두 컴퓨터를 연결하는 네트워크(Network)의 탄생
  • 이 네트워크를 묶어 근거리 지역 네트워크(Local Area Network, LAN) 탄생
  • 범지구적으로 연결된 네트워크 - Internet 탄생
  • 웹 --> 인터넷에서 정보를 교환할 수 있는 환경(World Wide Web), 시스템 (수단)

웹에서 정보 주고받기

  • 손님이 직원에 요청 | "programmers.co.kr 정보 주세요
  • 요청에 대하여 직원이 처리 | 작업 진행
  • 상황에 따라서 직원이 손님에게 응답 | "여기 있습니다" / "요청이 이상한데요"
  • 클라이언트 (정보를 요청하는 컴퓨터) / 서버 (정보를 제공하는 컴퓨터)

HTTP 의 구조

  • Hypertext Transfer Protocol
  • 웹 상에서 정보를 주고받기 위한 약속
  • 클라이언트에서 서버로 정보를 요청하는 것을 HTTP 요청 (request) 라고 한다. 
  • 요청된 정보에 대해 서버가 클라이언트에게 응답하는 것을 HTTP 응답 (response) 라고 한다. 
  • HTTP 도 요청/응답에 대한 정보를 담는 Head와 내용물인 Body 로 나뉜다. 

2.  웹페이지와 HTML

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

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

  • <!DOCTYPE html> 를 통해 HTML5 임을 명시
  • 웹 스크래핑 관점에서 우리가 원하는 내용이 HTML 문성의 어디에 있고 어떤 태그로 묶여있는지 관찰해야 한다. 

3. python을 이용해 HTTP 통신하기

requests 라이브러리 >> python을 이용해서 간단히 HTTP 통신을 진행할 수 있는 라이브러리

 

pip install requests

정보를 달라고 요청하기, GET

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

결과 : <Response [200]> 

res.headers 
# 헤더 확인

res.text[:1000]
# body를 텍스트 형태로 확인

정보 갱신하는 것을 요청하기, POST

payload = {"name": "Hello", "age": 13}
requests.post("https://webhook.site/4bf07901-2400-4893-8964-5edde596eed1",payload)

결과 : <Response [200]>

res.status_code
# 상태 코드를 확인하기

결과 : 200

 

4. 윤리적으로 웹 스크래핑, 크롤링 진행하기

  • 웹 스크래핑 : 웹 페이지들로 부터 우리가 원하는 정보를 추출 / 특정한 목적으로 특정 웹 페이지에서 데이터를 추출하는 것 ex) 날씨 데이터 가져오기, 주식 데이터 가져오기 ..
  • 웹 크롤링 : 핵심은 색인 / 크롤러를 이용해서 웹 페이지의 정보를 인덱싱 / URL을 타고다니며 반복적으로 데이터를 가져오는 과정 - 데이터 색인 ex) 검색 엔진의 웹 크롤러

※  올바르게 HTTP 요청하기

  • 웹 스크래핑/크롤링을 통해 어떤 목적을 달성하고자 하는가?
  • 나의 웹 스크래핑/크롤링이 서버에 영향을 미치지는 않는가?
  • 로봇 배제 프로토콜(REP) : 웹 브라우징은 사람이 아닌, 로봇이 진행할 수 있다.
  • robots.txt : 웹 크롤러들은 이 규칙을 지키면서 크롤링을 진행한다. / User-agent, Disallow, Allow 등의 키워드를 통해 사용 / User-agent: * Allow: / --> 모든 user-agent 에 대하여 접근을 허용 
res = requests.get("https://www.programmers.co.kr/robots.txt")
print(res.text)

#결과 : 

User-Agent: *

Disallow: /users
Disallow: /managers
Disallow: /cable
Disallow: /admin
Disallow: /start_trial
Disallow: /pr/*
Allow: /

Sitemap: https://programmers.co.kr/sitemaps/sitemap.xml

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

  • DOM (Document Object Model) : 문서 객체 모델 / HTML문서를 브라우저가 이해할 수 있도록 만든 Tree 자료구조
    • 브라우저의 렌더링 엔진은 웹 문서를 로드한 후, 파싱을 진행
  • DOM 은 실제로 굉장히 복잡하다.  각 노드를 객체로 생각해 문서를 더욱 편리하게 관리할 수 있다. 
  • 결론적으로 브라우저는 HTML을 파싱해서 DOM으로 바꾸고 원하는 요소를 동적으로 변경해 원하는 요소를 쉽게 찾을 수 있게 한다.
  • 파이썬으로 HTML을 분석하는 HTML Parser가 필요하다.

 

 

'데브코스' 카테고리의 다른 글

DAY 09  (0) 2023.10.26
DAY 08  (0) 2023.10.25
DAY6 - 파이썬으로 웹 다루기  (1) 2023.10.23
Day03  (0) 2023.10.18
DAY 2  (0) 2023.10.17