잇연

[sesac LLM] day12-240117 웹크롤링, 인코딩, 디코딩 본문

SESAC LLM 개발자 강의/Python

[sesac LLM] day12-240117 웹크롤링, 인코딩, 디코딩

잇연 2024. 1. 17. 13:17

웹크롤링

웹 크롤링(Web Crawling)이란?

  • 웹 크롤링은 웹 페이지를 자동으로 요청하여 원하는 정보만 취득하는 기술
  • 크롤러(Crawler)라가 웹 페이지를 순회하며 데이터를 수집하고 저장한다.
  • 구글은 전세계에서 가장 열심히 웹 크롤링을 하는 회사 중 하나이다

웹 크롤링으로 뭘 할 수 있나?

  • 뉴스 수집
  • 쇼핑몰 상품 가격 추적
  • 강의 계획서 모으기 등등

주요 사이트별 정책 가이드라인

일부 웹 사이트는 크롤링을 금지하거나 사용량에 제한을 두고 있다. robots.txt 파일 을 꼭 확인하세요.

 

서버사이드 렌더링 방식 & 클라이언트 사이드 렌더링 방식

서버사이드렌더링(SSR) 이란?

웹 페이지의 콘텐츠가 서버에서 생성되어 완성된 형태로 브라우저에 전송되는 방식 초기 로딩 시간이 빠르고 SEO(검색엔진 최적화)에 유리

  • 비유) 가구를 모두 조립한 상태로 배송해 주는 방식. 그러다보니 가구의 새로운 부품이 필요 하면 매번 다시 보내줘야 함.
  • 예시) Wikipedia
## 서버사이드렌더링 방식의 페이지를 크롤링 할 때 고려해야 하는 것은?

- HTML 소스에 직접 접근이 가능해 HTML 을 파싱하여 데이터를 쉽게 수집할 수 있음.
- 동적으로 로딩되는 데이터는 존재하지 않기 때문에 추가 처리 필요 없음.
HTML 파싱을 위해 노드를 특정하는 방법이 필요한데, 이 때 필요한 것이 Xpath 또는 CSS Selector

클라이언트 사이드 렌더링 방식(CSR)이란 ?

  • 서버에서는 최소한의 HTML 페이지만을 전송하고, JavaScript를 통해 클라이언트(브라우저)에서 콘텐츠를 렌더링하는 방식
  • 사용자 경험 향상을 위해 사용되지만 초기 로딩 시간이 길어질 수 있음
  • 비유) 가구에서 필요할 것 같은 부품과 기능들을 모두 한번에 보내줌. 그러다 보니 조립하는 시간이 많이 필요하지만, 추가 기능을 위해서 새로 요청할 필요는 없음.
  • 예시) 네이버 Vibe 리액트는 왜 대세가 되었을까?> csr 때문
- JavaScript가 실행되고 난 후의 동적인 데이터를 수집하기 위해서는 별도의 도구(예: Selenium) 필요
- 웹 페이지가 완전히 로드될 때까지 기다려야 하며, AJAX 요청을 처리하는 로직 필요데이터가 필요하면, 미리 렌더링해서 보내는 것이 아니라 그 때 그 때 서버에 호출한다.
- python의 requests 모듈을 이용한 웹 크롤링 sesac-project 에 코드 있음.

Python with open 문법 사용방법

  • with open 문법은 파일을 다룰 때 자주 쓰이는데, 파일을 열고 자동으로 닫아주는 기능이 있다.
  • 이게 편리한 이유는 파일을 열었으면 반드시 닫아줘야 하는데 with 구문을 쓰면 이걸 자동으로 처리해 준다.
  • 기본 사용법
#파일읽기
with open('example.txt', 'r') as f:
content = f.read()
print(content)

#파일쓰기
with open('example.txt', 'w') as f:
f.write('안녕, 도봉아!')

인코딩이 무엇인가?

  • 인코딩은 데이터를 특정 형식으로 변환하는 과정
  • 인코딩의 반댓말은 디코딩 문자 인코딩은 문자를 컴퓨터에서 입출력 할 때, 어떻게 입출력할지 약속한 것!

주요 문자 인코딩 방식

ASCII (American Standard Code for Information Interchange)

  • 7비트 인코딩 방식.
  • 영어 알파벳, 숫자, 기본 특수문자 표현 가능.
  • 컴퓨터가 탄생한 초창기 때만 하더라도 이 방식으로 괜찮았다.

UTF-8 (Unicode Transformation Format - 8-bit)

  • 가변 길이 인코딩 방식 (1~4바이트).
  • 모든 유니코드 문자를 표현할 수 있어, 국제적으로 가장 널리 사용됨.
  • 이모지도 유니코드다!

인코딩과 디코딩

인코딩(Encoding): 문자를 바이트로 변환하는 과정. 디코딩(Decoding): 바이트를 문자로 변환하는 과정.

  • 인코딩 사용 예시 Python에서는 문자열을 바이트로 변환할 때 인코딩을 지정할 수 있다.
#문자열 인코딩
text = "안녕하세요!"
encoded_text = text.encode('utf-8')
#바이트 디코딩
decoded_text = encoded_text.decode('utf-8')

인코딩 관련 문제 해결

인코딩오류: 다른 인코딩으로 인코딩된 문자열을 잘못된 인코딩으로 해석할 때 발생. 해결 방법: 데이터의 인코딩 형식을 확인하고 올바른 인코딩을 사용하여 해석 해야 한다. 보 통은 인코딩 에러가 있음을 알려준다.


실습

# 필요한 라이브러리 임포트
import requests
from lxml import html
from IPython.display import Image, display
president_img_url = '<https://www.president.go.kr/assets/images/president/intro_president.png>'
president_img = requests.get(president_img_url).content
#display(Image(president_img))

print(president_img)

<설명> 원하는대로 이미지의 출력 형식을 지정가능.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

페이지랭크란?

더보기
더보기
더보기

페이지랭크(PageRank)는 웹 페이지의 중요성을 평가하는 알고리즘으로, 구글의 창립자인 래리 페이지(Larry Page)와 세르게이 브린(Sergey Brin)이 개발했습니다. 이 알고리즘은 인터넷의 웹 페이지를 검색 결과에서 어떻게 순위를 매길지 결정하는 데 사용됩니다.

페이지랭크의 핵심 아이디어는 "웹 페이지의 중요성은 해당 페이지로의 링크 수에 의해 결정된다"는 것입니다. 하지만 모든 링크가 동등하게 취급되지는 않습니다. 다른 중요한 페이지로부터 링크를 받은 페이지는 더 높은 점수를 받습니다.

페이지랭크 알고리즘의 주요 특징은 다음과 같습니다:

  1. 링크 분석: 웹 페이지가 다른 페이지로부터 받는 인바운드 링크(들어오는 링크)를 분석합니다. 많은 인바운드 링크를 받을수록 페이지는 더 중요하다고 간주됩니다.
  2. 품질 가중치: 모든 링크가 같은 가치를 갖지는 않습니다. 높은 페이지랭크를 가진 페이지로부터의 링크는 더 큰 가중치를 갖습니다.
  3. 반복 계산: 페이지랭크는 반복적인 계산을 통해 수렴합니다. 각 반복에서 모든 페이지의 랭크는 연결된 페이지들의 랭크에 기반하여 재계산됩니다.
  4. 무작위 서핑 모델: 사용자가 무작위로 링크를 클릭하여 웹을 탐색한다는 가정하에, 어떤 페이지가 방문될 확률을 계산합니다. 이 모델은 링크 구조뿐만 아니라 사용자의 행동 양식도 고려합니다.


페이지랭크 알고리즘은 기본적으로 페이지의 중요도를 숫자로 표현하며, 이 숫자는 해당 페이지로의 링크들과 그 링크들이 있는 페이지의 중요도에 의해 결정됩니다. 예를 들어, 많은 중요한 페이지들이 특정 페이지로 링크를 걸고 있다면, 그 페이지의 페이지랭크는 높아집니다.

페이지랭크는 복잡한 웹 환경에서 가장 관련성 높은 정보를 찾는 데 도움을 줄 수 있는 강력한 도구입니다. 구글 검색 엔진의 초기 성공 요인 중 하나이며, 검색 엔진 최적화(SEO)와 관련된 많은 전략에 영향을 미쳤습니다.