본문 바로가기
NLP

[NLP] Web Scraping, BeautifulSoup

by 단깅수 2024. 6. 27.
728x90

What is Web Scraping??

  • 정의
    • 단일 웹페이지에서 원하는 정보를 추출하는 행위
  • Web Crawling vs Web Scraping
    • Web Crawling : URL을 탐색해 반복적으로 링크를 찾고 정보를 가져오는 과정으로, 특정 웹페이지를 목표로 하지 않음
    • Web Scraping : 우리가 정한 특정 웹페이지에서 데이터를 추출

Web Scraping Process

웹페이지의 요청과 응답

1)  웹페이지 열기

  • 요청 (Request) : 클라이언트 혹은 사용자가 특정 서버에 리소스나 서비스를 요청하는 과정
  • 응답 (Response) : 요청한 사항에 대해 서버가 클라이언트 혹은 사용자에게 리소스나 서비스를 제공하는 과정

2) Client

  • 서버에서 제공하는 서비스를 받는 입장
  • 데스크탑, 태블릿과 같은 장비일 수 있음
  • Chrome, firefox 등의 웹 브라우저일 수 있음

3) Server

  • 리소스 혹은 서비스를 제공하는 입장
  • 웹서버, 메일서버, 파일서버 등 다양한 서버가 있음
  • 여러 Client를 대상으로 서비스를 제공

4) 이 후

  • HTML or CSS 태그 등 필요한 정보가 담겨져 있는 태그를 찾아 정보 위치 탐색
  • 필요한 정보를 추출 후 저장

웹페이지 구성 요소

1) HTML

  • Hyper Text Markup Language
    • 웹페이지 Contents(텍스트, 이미지 등)를 정의
    • 하이퍼텍스트와 마크업 언어를 합친 언어
      • 하이퍼텍스트 : 하이퍼링크를 통해 한 문서에서 다른 문서로 접근할 수 있는 텍스트
      • 마크업 언어 : 태그 등을 이용하여 문서나 데이터의 구조를 명기하는 언어
      • 확장자 : .html
      • 구조 : 트리 구조 (계층 구조)
태그 역할
<html> HTML 문서의 시작과 끝을 의미
<head> 브라우저가 문서를 해석하는데 필요한 정보
<title> 브라우저의 제목 표시줄에 들어갈 내용
<body> 웹페이지주요 정보
<font> 글씨체에 관한 속성, color, face 등 설정 가능
<img> 이미지에 관한 속성, src, width, height 등 설정 가능
<table> 표, 테이블을 만드는 태그
<th> 테이블의 헤더 부분을 만드는 태그
<tr> 테이블의 행을 만드는 태그
<td> 테이블의 열을 만드는 태그
<h1>, <h2>, <h3>, <h4>, ... 크기가 다른 텍스트, 숫자가 클수록 글씨 크기는 작아짐
<p> 텍스트 문단을 지정
<li> 목록을 만들 때 사용
<div> 볼록 단위로 페이지의 부분 공간을 정의 (레이아웃)
<span> 줄 단위로 페이지의 부분 공간을 정의
<br> 줄바꿈 태그

 

2) CSS

  • CSS (Cascading Style Sheets)
  • HTML로 입력한 요소에 대해 디자인 스타일을 적용할 때 사용하는 언어
    • 웹페이지 구성 요소의 크기, 색상 변경 등
    • 확장자 : .css

 

3) JavaScript

  • 웹페이지의 동작과 상호작용을 정의
    • 동작 예시 : 움직이는 요소, 이미지 슬라이더 등
    • 상호작용 : 사용자가 마우스를 올리면 메뉴 보여주기 등

실제로 Web Scraping 해보기 (BeautifulSoup)

https://livetodaykono.tistory.com/76

  • What is BeautifulSoup?
    • python에서 scraping하는데 필요한 함수를 모아놓은 라이브러리
## 필요한 패키지 import
from bs4 import BeautifulSoup

## html 태그 예시
html_str = """
<html>
    <head>
        <title>Intro to Web Scraping</title>
    </head>
    <body>
        Life is short. You need Python.
    </body>
</html>
"""

## beatifulsoup을 이용해 html 태그 parsing
## head 태그 탐색
bs_obj = BeautifulSoup(html_str, 'html.parser')
head = bs_obj.find('head')
print(head)

## div 태그 탐색
## find_all 함수로 모든 div 태그 부분 탐색
div = bs_obj.find_all('div')
print(div)

## 모든 li 태그 탐색
## 알고 싶은건 태그의 실제 텍스트, 내용이므로 text 인자로 텍스트를 추출해 출력
li = ul[0].find_all('li')
for x in li:
    print(x.text)

 

728x90