20230418 TIL - Web scraping, HTTP

ohyujeong·2023년 4월 18일
0

TIL

목록 보기
7/27
post-thumbnail

📖 오늘의 학습

  • Web scraping
  • HTTP

Web (WWW, World wide web)

  • 두 컴퓨터를 연결하는 네트워크(Network)가 탄생
  • 두 개의 컴퓨터를 넘어 한 지역을 묶는 네트워크인 근거리 지역 네트워크(LAN, Local Area Network) 탄생
  • 더 나아가 범지구적으로 연결된 인터넷(Internet - Inter network)이 탄생하게 되었다.

🤔 웹에서는 어떻게 정보를 주고 받을까?

먼저 우리의 일상생활에서는 이렇게 정보를 주고 받는다.

  1. 손님이 직원에게 정보 요청
  2. 요청에 대해서 직원이 처리
  3. 상황에 따라서 직원이 손님에게 응답

같은 방식으로 컴퓨터 또한 이렇게 정보를 주고 받는다.

  1. programmers.co.kr 정보 주세요 -> client가 server에게 request
  2. 서버가 자원을 탐색한다.
  3. 서버가 클라이언트에게 답변한다 - 여기 있습니다 or 요청이 이상합니다 -> server가 client에게 response 전달

➡️ 이것이 HTTP (Hypertext transfer protocol) 이다.

HTTP의 구조

  • 웹 상에서 정보를 주고받기 위한 약속
  • 클라이언트에서 서버로 정보를 요청하는 것을 HTTP요청(request)이라고 한다.
  • 요청된 정보에 대해 서버가 클라이언트에게 응답하는 것을 HTTP 응답(response)라고 한다.

직관적인 이해를 위한 예시

인터넷 쇼핑을 통해 구매한 물품을 배송받으려고 한다.

  • 받는사람이름, 주소, 배송방법을 기입한다. —> Host, resource, method
  • 받는 택배는 크게 송장, 내용물로 나뉨 —> html의 head, body

client가 server에게 요청 (request)

GET / HTTP 1.1
Host : www.programmers.com
User-Agent : Mozilla/5.0

server가 client에게 응답 (response)

HTTP/1.1 200 OK (상태코드를 리턴)
html- head, body…

웹 사이트와 웹 페이지

  • 웹 속에 있는 문서 하나는 웹 페이지 이다.
  • 웹 사이트는 웹 페이지의 모음이다.

웹 페이지는 어떻게 만들까?

  • 웹 페이지는 html, css, javascript로 이루어져있다.
  • 웹 브라우저 (크롬, 파이어폭스, 사파리 등등)는 HTTP로 HTML요청을 보내고, HTTP응답에 담긴 HTML문서를 우리가 보기 쉬운 형태로 화면을 그려준다.

다시 말해,

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

웹 스크래핑

  • 웹 브라우저마다 지원하는 태그와 속성이 다르므로 주의
  • 원하는 내용이 HTML문서의 어디에 있는지, 어떤 태그로 묶여있는지 관찰

웹 브라우저의 역할을 파이썬 코드로 해보기

  1. 주피터 랩(Jupyter lab) 세팅
  • mac terminal command를 이용한 jupyterlab 설치
    pip3 install jupyter (만약 pip3가 없다면 설치해야함)
  • jupyter notebook 입력하여 실행
  1. python requests 라이브러리 사용
  • http 통신을 진행할 수 있는 라이브러리
  • %pip install requests 로 주피터랩 가상환경에 설치 (%를 앞에 붙여줘야 함)
  • http method의 종류
  • 정보를 달라고 요청하기, GET
  • 정보를 갱신하는 것을 요청하기, POST (webhook.site ) 개인 전용 URL을 생성하여 요청을 받은 내용을 출력해줌

웹 스크래핑과 웹 크롤링

차이는 무엇일까?

  • 웹 스크래핑 : 웹 페이지들로부터 우리가 원하는 정보를 추출. 예) 날씨 데이터 가져오기, 주식 데이터 가져오기
  • 웹 크롤링 : 크롤러를 이용해서 웹 페이지의 정보를 인덱싱. URL을 타고 다니며 반복적으로 데이터를 가져오는 과정. 여기에는 이런 정보가 있다, 저기에는 이런 정보가 있다는 데이터 색인을 하는 활동
예) 검색엔진의 웹 크롤러 : 검색을 하기 위해서는 역설적이게도 그 사이트 안에 어떤 정보가 있는지 알아야함. 크롤러가 이를 수행하여 검색을 용이하게 함

올바르게 HTTP 요청하기

  • 웹 스크래핑/크롤링을 통해 어떤 목적을 달성하고자 하는가?
  • 나의 웹 스크래핑/크롤링이 서버에 영향을 미치지는 않는가?
  • 서버에 너무 많은 요청을 보내서는 안됨
  • 상업적인 요소가 엮여있을 때는 조심스럽게 수집해야함
    로봇 배제 프로토콜 (REP, robot exclusion protocol)
  • 무분별한 웹 브라우징을 통한 정보취득을 막기 위해 1994에 정해진 규칙
  • 로봇이 브라우징하지 못하도록 함
  • robots.txt 에 적혀진 규칙을 지킨다
      User-agent: *
      Disallow: /
      모든 user-agent로부터 접근을 거부 
      User-agent: *
      Allow: /
      모든 user-agent로부터 접근을 허가
      User-agent 에 특정한 user-agent를 명시할 수도 있음
       

Web scraping 기초

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

단순한 줄글이 어떻게 홈페이지 화면이 되는 것일까?

  • 브라우저의 렌더링 엔진은 웹 문서를 로드한 후, 파싱한다.
  • 이를 DOM(Document object model)이라고 한다.

DOM 이란?

  • html태그를 루트노드로 head, body,… 태그들이 자식노드로 있는 트리구조

  • 각 노드를 객체로 생각하면 문서를 더욱 편리하게 관리할 수 있다.

  • DOM Tree를 순회하면서 특정 원소를 추가할 수 있다. -> 동적구조여서 가능
    var imgElement = document.createElement(“img”);
    document.body.appendChild(imgElement)

  • DOM Tree를 순회하면서 원하는 특정 원소를 찾을 수 있다
    document.getElementByTagName(“h2”)

브라우저는 HTML을 파싱해서 DOM을 생성한다.
이를 바탕으로 요소를 변경하거나 찾을 수 있었다.
파이썬으로 HTML을 분석하는 HTML Parser가 필요하다!


📝 주요메모사항


😵 공부하면서 어려웠던 내용

profile
거친 돌이 다듬어져 조각이 되듯

0개의 댓글