본문 바로가기

IT.모바일/배움

파이썬 웹 크롤링

by FrankUniq 2023. 6. 11.
SMALL
목표: 10개씩 데이터 표시되는 특정 웹사이트. 총 2만여 건의 데이터를 페이지 넘기며 자동 수집.

1. 웹 크롤링 개요
o절차, o패키지, oHTML 기초, oCSS 기초, o개발자도구 웹 구조

2. 웹 데이터 자동 수집
HTML 소스 가져오기, 데이터로 변환, 실습-서점 베스트셀러 가져오기

3. 웹 브라우저 제어
selenium 개요, 웹 로드 및 HTML 소스 가져오기, 웹 브라우저 제어, 실습-네이버환율수집하여 csv로 저장, 실습-사업자번호 휴폐업 조회

 

웹 크롤링 예시
: 특정 단어와 관련된 뉴스, 일일 환율 정보, 시황 정보 수집.

웹 크롤링 필요 지식
: requests, selenium, BeautifulSoup 패키지, 크롬 개발자 도구, HTML 태그, CSS


웹 크롤링 절차

1. HTML 문서 요청 및 추출
- requests 또는 selenium 패키지 활용
2. HTML 문서 분석
- 크롬 개발자 도구, HTML 태그, CSS 선택자 활용
3. 원하는 데이터 추출
- requests, selenium, BeautifulSoup 활용
4. 찾은 데이터 가공 및 저장
- 엑셀 또는 텍스트 파일로 저장

웹 크롤링 패키지

 

  • requests: HTML 수집 (브라우저 실행 x)

- 웹 브라우저를 실행하지 않고 URL에 접속, 요청(request)을 보낼 수 있고, 결과값(HTML)을 추출함.
- 응답(response)된 데이터의 Header, body(HTML) 등의 정보 확인
- 빠르고 안정적, 동적 웹 페이지를 크롤링하기 위해서는 많은 분석 필요.

  • selenium: HTML 수집 (브라우저 실행 o)

- 웹 브라우저를 자동으로 실행해 URL에 접속, 결과값(HTML)을 추출함.
- 시뮬레이션하듯이 웹 브라우저를 직접 실행하여 URL에 접속.
- 응답(reponse)된 데이터의 Header, body(HTML) 등의 정보 확인
- 느리고 불안정, 동적 웹 페이지 크롤링이 쉬움.

  • BeautifulSoup: HTML 분석

- requests와 selenium으로 받아온 HTML(내용) 데이터를 parsing해 객체로 구조화
- HTML 태그와 CSS 속성을 이용해 원하는 정보를 찾을 수 있는 기능 제공

* 주의
1. 웹 페이지 접속 시 time.sleep()을 추가하여 시간차 간격을 두고 데이터를 수집해야 한다.
짧은 시간에 너무 많은 접속을 시도하면 웹 서버에 부하를 주어 DDoS 공격으로 오인해 차단될 수 있다.
2. 수백 페이지 이상을 접속할 때에는 쉬는 간격, 시간을 랜덤하게 설정한다.
동일 간격, 동일 시간의 규칙적인 휴식은 크롤링 봇으로 판단해 차단될 수 있다.
3. 크롤링 코드 지속적인 유지 보수 필요. 웹 페이지의 업데이트를 고려.

HTML(HyperText Markup Language) 기초

- 웹 페이지의 모습을 표현하기 위한 마크업 언어 HTML.
- 마크업 언어는 Tag를 사용해 문서나 데이터의 구조, 서식 등을 표현한다.
- 그러므로 HTML 페이지는 태그와 실제 데이터로 구성된 문서.
- HTML 문서의 콘텐츠 구조, 문단, 제목, 표, 이미지, 동영상 등 모든 구성 요소는 태그로 정의한다. // ex. 문단 태그 <p>
- 웹 브라우저(크롬 등)는 HTML의 태그를 해석하고 관련 정보를 시각화.
- HTML 소스에서 동일한 태그나 속성값이 반복되는 패턴. ex. 뉴스, 도서 목록
- 웹 브라우저가 태그 적용 영역을 인식할 수 있도록 태그를 시작과 끝 쌍으로 사용한다. // ex. <html> <head>...</head> <body> ... </body> </html>
- 태그에는 속성을 사용할 수 있다. // ex. <p align="left">에 사용된 align 속성에 left 값을 지정하여 문단 왼쪽 정렬.
- <head> ... </head>는 문서의 구조나 속성을 정의. 웹 브라우저에서는 보이지 않는다.
- <body> ... </body>는 다양한 태그를 이용해 페이지를 구성. 웹 브라우저에 결과로 나타난다.

<li> 리스트 한 줄

 

CSS(Cascading Style Sheets) 기초

- HTML 문서를 웹 브라우저에 표현할 때 서식을 정해주는 언어.
- 대부분 <style> 태그 안에서 HTML 각 요소의 배경색, 폰트 등의 서식 정의.

style 코드 분리. <style>...</style>


- 또는 HTML 태그 안에 style 코드 삽입. 가독성은 불편. 간단하게 스타일 적용 가능.

태그 안에 style 코드 삽입. <p style="..."> ... </p>

- CSS Selector[선택자]: HTML 태그에 스타일을 지정할 때 대상을 선택하거나 지정하는 방식. 스타일 적용 대상을 지칭하는 식별자.

- CSS 스타일 지정 방법: 속성과 값의 구분은 콜론(:)을 사용, 항목 간 구분은 세미콜론(;)을 사용. (파이썬 딕셔너리 자료형과 유사)

Selector{
	속성1: 값1;
	속성2: 값2;
}

(1) 요소 선택자: 특정 HTML 태그 전체에 CSS 스타일 일괄 적용. // ex. <p> 태그 전체, <a> 태그 전체.

<style>에서 <p> 태그 문자열에 파란색 지정

(2) ID 선택자: 태그에 정의된 ID값으로 특정 요소에 접근. #ID명으로 지정.

id가 kimchi인 글자에 파란색 적용.

(3) 클래스 선택자: 태그 종류에 상관없이 같은 클래스 이름을 가진 모든 요소에 접근하는 방식. <style> 태그 안에서 .클래스명으로 지정.

클래스가 "western"인 글자에 파란색 적용

- CSS Combinators[결합자]: 요소, ID, 클래스 선택자를 조합해서 사용. 특정 요소에 접근할 때 유용하다. 선택자 간의 계층 관계를 파악하여 ID나 클래스가 없는 요소에 접근할 때, 같은 클래스 이름을 가진 요소 중 특정 요소 하나만 선택하고 싶을 때.
- 4가지 결합자: 자식, 자손, 인접한 형제, 일반 형제
- 웹 크롤링에서는 부등호(>)로 구분하는 자식 결합자(A > B // 부모 A  한 단계 하위 요소 중 B 조건의 요소만 선택)와 공백으로 구분하는 자손 결합자(A B // 부모 A 하위 자손 요소들 중 B 조건의 요소만 선택)를 사용한다.

자식 결합자 / 자손 결합자

 

크롬 개발자 도구로 웹 구조 파악

- 원하는 정보가 있는 위치에 오른쪽 마우스 클릭 - [Inspect]를 이용해  해당되는 HTML 소스를 확인하고 특정 태그나 CSS selector를 쉽게 찾을 수 있다.
- 리소스 파일은 [Sources] - [Pages] 탭에서 도메인별 리소스 트리를 펼쳐서 특정 리소스 파일을 클릭하면 텍스트 형태는 소스 코드를, 이미지 파일은 이미지를 오른쪽 창에 보여준다. ctrl+p를 눌러 원하는 리소스를 검색하여 찾을 수 있다.

댓글