웹 상에서의 데이터 추출은 웹 페이지의 HTML 구조를 파싱하고 원하는 정보를 추출하는 과정을 뜻한다. 이러한 과정을 진행할 때 가장 대표적으로 쓰이는 방법으로는 웹 스크래핑과 웹 크롤링이 있다. 오늘은 이 두가지 방법과 데이터 추출시의 규제를 정해놓은 파일인 robots.txt에 대해서 알아보자.
웹 스크래핑
웹 스크래핑은 웹 페이지에서 원하는 정보를 추출하고 수집하는 프로세스를 의미한다. 주로 정적인 웹 페이지에서 데이터를 수집하며, 데이터를 추출하고 가공하여 필요한 형태로 변환한다. 이 때 Beautiful Soup와 Requests와 같은 라이브러리를 주로 사용한다. 일반적으로는 소규모의 데이터 수집시에 활용되는 방법이다.
웹 스크래핑 라이브러리들은 아래에 보다 자세히 정리되어있다.
https://seung2344.tistory.com/85
https://seung2344.tistory.com/86
[Python] 웹 스크래핑 라이브러리 - Selenium
≣ 목차 이전 포스팅에서 알아본 BeautifulSoup는 주로 정적인 웹 페이지에서의 데이터 추출을 위해 사용되는 라이브러리이다. 하지만 우리가 평소 사용하는 웹 사이트는 동적인 웹 페이지로 구성
seung2344.tistory.com
import requests
from bs4 import BeautifulSoup
# 웹 페이지에 GET 요청 보내기
response = requests.get('https://example.com')
# 응답 내용을 BeautifulSoup 객체로 파싱
soup = BeautifulSoup(response.text, 'html.parser')
# 원하는 데이터 추출
title = soup.find('title').text
print(title)
웹 크롤링
웹 크롤링은 웹 페이지를 자동으로 탐색하여 링크를 따라가며 데이터를 수집하는 프로세스를 의미한다. 주로 동적인 웹페이지에서 데이터를 수집하며, 여러 페이지를 방문하여 데이터를 수집한다. 이 때 보통 크롤러 또는 스파이더라고 불리는 프로그램을 사용한다.
일반적으로 큰 규모의 데이터 수집이 필요한 경우에만 사용되며, 검색 엔진이나 인덱싱 서비스에서 주로 활용되는 웹 정보 수집 방법이다.
import requests
from bs4 import BeautifulSoup
# 웹 페이지에 GET 요청 보내기
response = requests.get('https://example.com')
# 응답 내용을 BeautifulSoup 객체로 파싱
soup = BeautifulSoup(response.text, 'html.parser')
# 원하는 링크 추출
links = soup.find_all('a')
# 링크를 따라가며 데이터 수집
for link in links:
href = link.get('href')
if href:
subpage_response = requests.get(href)
subpage_soup = BeautifulSoup(subpage_response.text, 'html.parser')
# 필요한 데이터 추출 및 가공
robots.txt
robots.txt는 웹 사이트의 루트 디렉토리에 위치한 텍스트 파일로, 검색 엔진 로봇들에게 웹 사이트의 특정 부분에 대한 접근을 허용하거나 제한하는 지침을 제공하는 파일이다. 해당 파일은 일반적으로 웹사이트의 웹마스터가 작성하며, 웹 크롤러와 같은 로봇들이 웹 사이트를 방문할 때 이 파일을 참고하여 특정 페이지 또는 디렉토리에 접근할 수 있는지 여부를 결정한다.
robots.txt 파일은 특정한 문법과 규칙을 따라 작성되며, 일반적으로는 아래와 같은 내용을 포함하여 작성된다.
- User-agent 지시자 : 특정 로봇 또는 크롤러에 대한 지시를 제공한다. 주로 * 기호가 자주 쓰이며 이는 모든 로봇을 뜻한다.
- Disallow 지시자 : 특정 디렉토리 또는 페이지에 대한 엑세스를 거부하는 지시를 제공한다.
- Allow 지시자 : 특정 디렉토리 또는 페이지에 대한 엑세스를 허용하는 지시를 제공하며, 일반적으로 Disallow 지시자가 있을 때 사용된다.
확인하고자 하는 웹사이트 주소 뒤에 /robots.txt를 붙이면 확인 가능하다.
res = requests.get("https://www.programmers.co.kr/robots.txt")
print(res.text)
"""
User-Agent: *
Disallow: /users
Disallow: /managers
Disallow: /cable
Disallow: /admin
Disallow: /start_trial
Disallow: /pr/*
Allow: /
"""
'프로그래밍 > WEB' 카테고리의 다른 글
[웹 기초] HTTP 와 HTTPS (0) | 2024.04.02 |
---|---|
[웹 기초] HTML 이해하기 (0) | 2024.04.01 |