데브코스/Week 3

Week 3 - 2

out_of_anjoong 2024. 4. 2. 15:59

웹 구조

  1. HTTP
    • 인터넷과 웹
      • 네트워크 : 두 컴퓨터를 연결
      • 근거리 지역 네트워크(LAN) : 네트워크의 집합
      • 인터넷 : 범지구적으로 연결된 네트워크, 여러 컴퓨터 끼리 네트워크를 연결하는 것
      • 웹(WWW, World Wide Web) : 인터넷에서 정보를 교환하기 위한 시스템
        • 웹에서 정보를 주고받는 방법
          - 클라이언트 : 정보를 요청하는 컴퓨터
          - 서버 : 정보를 제공하는 컴퓨터
          클라이언트가 정보를 요청 -> 요청에 대해 서버가 작업을 수행 -> 수행한 작업의 결과를 클라이언트에게 응답
    • HTTP의 구조
      • 정의 : HyperText Transfer Protocol의 약자이며 웹 상에서 정보를 주고받기 위한 약속
      • HTTP 요청(Request) : 클라이언트가 서버로 정보를 요청하는 것
      • HTTP 응답(Response) : 요청된 정보에 대해 서버가 클라이언트에게 응답하는 것
      • Head : 요청/응답에 대한 정보, Body : 내용물
  2. 웹 사이트와 웹 페이지
    • 웹 페이지 : 웹 속에 있는 문서 하나
    • 웹 사이트 : 웹 페이지의 모음
    • 웹 브라우저 : HTTP 요청을 보내고 HTTP 응답에 담긴 HTML 문서를 우리가 보기 쉬운 형태로 화면을 그려주는(랜더링) 역할을 담당

Web Scraping 기초

  • 웹 크롤링과 웹 스크래핑
    • 웹 스크래핑 : 웹 사이트에서 우리가 원하는 정보를 추출(특정 웹 페이지에서 데이터를 추출)
    • 웹 크롤링 : 크롤러를 이용해서 웹 페이지의 정보를 인덱싱(URL을 타고다니며 반복적으로 데이터를 가져오는 과정)
  • 올바르게 HTTP 요청하기
    • 웹 브라우징은 사람이 아닌 로봇이 진행할 수 있음.
    • REP(Robot Exclusion Protocol) : 로봇 배제 프로토콜
      • robots.txt : 서버에 웹 페이지를 올릴 때 같이 올려 rep 명시.
        • User-agent : 규칙이 적용되는 대상 사용자 에이전트
          ex) User-agent: * - 모든 user agent를 뜻함.
        • Disallow : 크롤링을 금지할 웹 페이지
          ex) Disallow: / - 모두 차단
        • Allow : 크롤링을 허용할 웹 페이지
          ex) Allow: /$ - 현재 페이지만 허용
  • 정보 요청 : GET
import requests
res = requests.get("https://www.naver.com") # HTTP 응답이 담겨있음.

res.headers # Header 정보 확인

res.text # Body를 텍스트 형태로 확인

# <Response [200]> 스테이터스 코드(응답 코드)가 리턴되며 200은 OK

 

  • 정보 갱신하는 것을 요청하기 : POST
payload = {"name": "Hello", "age": 13} # post는 파라미터로 json 객체(딕셔너리)를 넣어 줘야한다.
res = requests.post("https://webhook.site/9b800196-6b9f-4580-a7bd-fe479ae7771f", data=payload)

res.status_code # 스테이터스 코드 확인

payload에 넣어준 정보

 

  • DOM(Document Object Model) : 문서 객체 모델, 웹 페이지의 콘텐츠 및 구조, 그리고 스타일 요소를 객체로 표현하여 프로그래밍 언어가 해당 문서에 접근하여 읽고 조작할 수 있도록 API를 제공하는 일종의 인터페이스. JS 같은 스크립트 언어가 쉽게 웹 페이지에 접근하여 조작할 수 있게끔 연결해주는 역할을 한다.

DOM 모델 출처(https://poiemaweb.com/js-dom)

 

 

 

다음 시간에 계속....