데이터 수집에 관한 웹 크롤링 학습
웹 크롤링
인터넷 상의 모든 웹 페이지를 방문하며,
각 페이지의 링크를 따라가면서 데이터를 자동으로 수집하는 방법.
크롤러 또는 스파이더라고 불리는 프로그램이 이를 수행하는데,
주로 검색 엔진에서 사용되어 웹 페이지를 색인화하고
검색 가능한 데이터베이스를 구축하는 데 활용한다.
주요 특징
웹 스크래핑
특정 웹 사이트나 페이지에서 필요한 데이터를 자동으로 추출하는 것을 의미
HTTP GET
요청을 보내고, 정상 응답을 받으면 HTML 코드를 분석하여 데이터를 추출한다.
주로 특정 정보나 데이터를 수집하기 위해 사용
주요 특징
공통점
크롤링을 통해 웹에 접근한 후 스크래핑을 통해 특정 데이터를 추출하는 형태로 함께 사용 가능
차이점
목적의 차이 :
수행 주체의 차이 :
예시
요약
웹 크롤링과 웹 스크래핑은 데이터 수집을 목적으로 하는 자동화 기술로,
각각의 목적과 사용 사례에 따라 구분되지만, 상호 보완적으로 함께 사용될 수 있다.
이를 통해 우리는 인터넷 상의 방대한 데이터를 효과적으로 수집하고 활용 가능
Robots Exclusion Standard
준수 여부)robots.txt
파일을 반드시 확인하고,robots.txt
를 붙여 확인 가능
네이버의 로봇 배제 표준 :
기본적으로 모든 봇의 모든 경로 접근을 금지하고, 아래 두 경로에 대해서만 접근을 허용한다.
루트 디렉토리: /$
프라이버시 샌드박스 관련 파일: /.well-known/privacy-sandbox-attestations.json
유튜브의 로봇 배제 표준 :
Mediapartners-Google (Google 광고 관련 봇)* 을 제외하고는 모두 접근이 금지되어 있다.
웹 사이트를 구현하기 위해 사용되는 주요 기술 : HTML, CSS, JavaScript
HTML (Hyper Text Markup Language)
<h1>
, <p>
, <div>
, <a>
등CSS (Cascading Style Sheets)
JavaScript
+) 웹의 구성요소 핵심 내용 추가
웹 서버 (Web Server)
웹 브라우저 (Web Browser)
URL (Uniform Resource Locator)
HTTP / HTTPS (HyperText Transfer Protocol/Secure)
요약
웹 사이트는 HTML, CSS, JavaScript라는 세 가지 주요 기술로 구성된다.
- HTML은 웹 페이지의 구조를 정의하고,
CSS는 시각적 스타일을 적용하며,
JavaScript는 웹 페이지에 동적인 기능을 추가한다.
프로그래밍 언어가 아닌 문서를 설명하는 정보를 표현하는 마크업 언어,
웹 페이지를 구성하는 골격을 이루며, 문서의 구조나 서식을 포함한다.
HTML의 주요 구성 요소
문서 형식 선언 : Doctype
<!DOCTYPE html>
루트 요소 : html
<html> ... </html>
헤드 : Head
<head>
<title>문서 제목</title>
<meta charset="UTF-8">
<link rel="stylesheet" href="styles.css">
</head>
본문 : Body
<body>
<h1>제목</h1>
<p>문단 텍스트</p>
<img src="image.jpg" alt="이미지">
</body>
HTML 태그 및 속성
주요 태그
div 태그
<div>div 태그로 생성된 공간</div>
p 태그
<p>p 태그로 생성된 단락</p>
class 속성
<div class="common-class"> 이 div는 class 속성을 가짐 </div>
<p class="common-class"> 이 p 태그도 같은 class 속성을 가짐 </p>
+) class 부가 설명
div class="example"
→ '하나의 공간(클래스)를 만들겠다'XML 문서의 특정 부분을 선택하고 검색하기 위한 언어.
HTML 문서에서도 유용하게 사용되며, 주로 웹 크롤링 및 스크래핑에서 특정 요소를 찾는 데 사용
XPath의 주요 기능
절대 경로
/html/body/h1
(HTML 문서의 h1 요소를 선택)상대 경로
//p
(문서 내 모든 p 요소를 선택)속성 선택
//img[@alt='이미지']
(alt 속성이 '이미지'인 img 요소를 선택)텍스트 내용 선택
//p[text()='문단 텍스트']
(텍스트가 '문단 텍스트'인 p 요소를 선택)AND 연산자
//div[@class='content' and @id='main']
OR 연산자
//a[@href='home.html' or @href='index.html']
위치 지정자
(//p)[2]
XPath 표현식의 예시
단일 요소 선택 : //h1
특정 클래스 선택 : //div[@class='header']
특정 ID 선택 ://*[@id='main']
속성과 텍스트 결합 : //a[@href='contact.html'][text()='Contact']
요약
HTML의 구조와 XPath의 역할
HTML의 구조 :
문서 형식 선언(Doctype) : 문서의 버전을 정의
루트 요소(html) : HTML 문서의 최상위 요소
헤드(Head) : 메타데이터와 외부 리소스를 포함
본문(Body) : 웹 페이지의 실제 콘텐츠를 포함
XPath의 역할 :
HTML 및 XML 문서에서 특정 요소를 선택하고 검색하는 언어
절대 경로와 상대 경로를 사용하여 요소를 찾음
속성과 텍스트 내용을 기반으로 요소를 선택
CGV 메인 페이지 > 예매 화면
F12 키를 활용해서 HTML 구조 확인
예시 : CGV 메인 페이지 > 예매 화면 > 상단 혜택 메뉴의 XPath
XPath 복사 결과 ://*[@id="cgvwrap"]/div[2]/div[2]/div/ul/li[6]/h2/a
Python에서 웹 데이터 크롤링을 위한 기초 라이브러리.
주요 개념
requests 라이브러리
:
Python에서 HTTP 요청을 보내기 위해 가장 많이 사용되는 라이브러리.
웹 페이지를 호출하여 HTML 내용을 가져온다.
BeautifulSoup 라이브러리
:
HTML 내용을 파싱하여 데이터를 추출하는 라이브러리.
requests와 함께 사용되어 웹 페이지의 데이터를 크롤링하고 파싱하는 데 유용하다.
파싱 (Parsing):
웹 상의 자연어, 컴퓨터 언어 등의 문자열을 분석하여 유용한 정보를 추출하는 프로세스
!pip install beautifulsoup4
!pip install requests
import requests
from bs4 import BeautifulSoup as bs
url = "크롤링하려는 웹페이지의 주소"
# 웹페이지 요청
response = requests.get(url) # 지정된 url에 HTTP GET 요청을 보내고, 응답 받기
# HTML 파싱
soup = bs(response.content, "html.parser")
# response의 콘텐츠(HTML) 가져오기
# BeautifulSoup 객체를 생성하여 HTML 콘텐츠 파싱
주요 개념
!pip install selenium
!pip install webdriver-manager
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
import time
def main():
url = "http://www.example.com"
# Service 객체를 사용하여 Chrome 드라이버 초기화
service = Service(ChromeDriverManager().install()) # Chrome 드라이버를 자동으로 다운로드하고 설치
driver = webdriver.Chrome(service=service)
driver.get(url)
time.sleep(5) # 웹 페이지 로딩 대기
# 예시: 특정 요소 찾기 및 상호작용
element = driver.find_element(By.ID, 'some_element_id')
element.click()
time.sleep(5) # 동작 후 대기
driver.quit()
if __name__ == '__main__':
main()
Selenium의 장점
위 링크 참고
+) CSS 구조 확인하기 (링크) : 선택한 영역의 코드 확인 가능