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)
- 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
'NLP' 카테고리의 다른 글
[NLP] API를 활용한 Web Crawling (0) | 2024.06.29 |
---|---|
[NLP] Web Crawling, Selenium (0) | 2024.06.28 |
[NLP] 자연어처리 토큰화작업 2, 하위 단어 토큰화 (0) | 2024.03.13 |
[NLP] 자연어처리 토큰화작업(KoNLPy, NLTK, SpaCy) (2) | 2024.03.07 |
[NLP] 파이토치(Pytorch)를 이용한 텍스트 데이터 증강 (0) | 2024.02.29 |