[데이터분석] 데이터 크롤링
2024. 8. 14. 00:16ㆍAI & DS/머신러닝
Crawling
- 자동으로 웹페이지 데이터를 수집하는 행위
- 너무 많은 크롤링은 서버에 과도한 부하를 주게 되어서 IP가 차단되는 상황이 발생할 수 있음
Robots.txt와 사용자 에이전트(user agent)
- Robots.txt
- 웹 사이트 및 웹 페이지를 수집하는 로봇들의 무단 접근을 방지하기 위해 만들어진 로봇 배제 표준/국제 권고안 → 법적인 통제력은 없으나 서로 간 예의
- 일부 스팸 봇이나 악성 목적을 지닌 가짜 클라이언트 로봇은 웹 사이트에 진짜 클라이언트처럼 접근
- 무단으로 웹 사이트 정보를 긁어가거나, 웹 서버에 부하를 줌
- ⇒ 이런 로봇들의 무분별한 접근을 통제하기 위해 마련
- User agent
- 웹 서버에 요청을 보내도 요청을 거부 당하는 경우 발생 → 무단 봇으로 짐작하고 웹 서버에서 접근을 막는 것
- 우리가 스팸 봇이 아니라 사람이라는 것을 브라우저에게 알려줘야 함
- ⇒ 이때 브라우저에게 전달하는 것이 사용자 에이전트 정보
- [주의할 점]
- 서버에 과도한 부하를 주지 않는다.
- 가져온 정보를 사용할 때(특히 상업적으로) 저작권과 데이터베이스권에 위배되지 않는지 주의한다.
- (예시 캡처) 사이트 URL/robots.txt
크롤러
정적 웹페이지 VS 동적 웹페이지
- 정적 웹페이지
- 웹 서버에 이미 저장된 기본 html 전송하고
- 데이터 자체의 변화 없는 한 고정 데이터 전달한다.
- Ex) 홈페이지 회사 소개
- 동적 웹페이지
- 요청 정보 처리 후 제작된 html 페이지 전송하고
- 사용자가 요청하는 상황 등에 따라 다른 데이터 전달한다.
- Ex) 뉴스 댓글, 상품 검색(특정 키워드를 입력하면, 그에 맞는 상품 페이지)
BeautifulSoup VS Selenium
- BeautifulSoup은 페이지 자체를 가져오다보니 막아둔 경우가 많음
- 따라서, Selenium을 쓰는 경우가 많을 것
특징 | BeautifulSoup | Selenium |
기능 | HTML 및 XML 파싱 | 브라우저 자동화 및 동적 웹 페이지와 상호 작용 |
적용 대상 | 정적 웹 페이지 | 동적 웹 페이지 |
JavaScript 처리 | 불가 | 가능 |
속도 | 빠름 | 느림 |
의존성 | requests 라이브러리 사용(별도의 브라우저 불필요) | 브라우저 및 브라우저 드라이버 필요(예) ChromeDriver |
설치 | 간단 (pip 설치) | 복잡 (브라우저 드라이버 설치 필요) |
사용 용이성 | 쉬움 | 상대적으로 어려움 |
브라우저 렌더링 | 없음 | 있음( 실제 브라우저 렌더링) |
사용자 상호작용 | 불가 | 가능( 클릭, 폼 제출 등 사용자 행동 시뮬레이션) |
정규표현식
- 정규표현식을 이용해 정교하게 원하는 데이터를 추출 / 삭제 / 변환 가능
- 데이터 중 특히 문자열 데이터를 정교하게 수행 가능
- (https://regexr.com/)
Dot, 반복
- Dot
- . (Dot) = 문자 하나 (숫자, 특수문자 포함)
- ? : 앞 문자가 0번 또는 1번 표시되는 패턴
- * : 앞 문자가 0번 또는 그 이상 반복되는 패턴
- + : 앞 문자가 1번 또는 그 이상 반복되는 패턴
- {n} : 앞 문자가 n번 반복되는 패턴
- {m, n} : 앞 문자가 m번 반복되는 패턴부터 n번 반복되는 패턴까지 가져올 수 있음
괄호와 하이픈
- [] 괄호 : 안에 들어가는 문자가 들어 있는 패턴 → ex) [abc] a, b, c 중 하나가 들어 있는 패턴을 의미
- 하이픈(-): 이용하면 알파벳 전체를 나타낼 수 있음 → ex) [a-c] a, b, c 중 하나가 들어 있는 패턴을 의미
- () 괄호: 괄호 안에 있는 단어 자체를 반환함 → ex) (abc) abc가 들어 있는 패턴을 의미
정규표현식 라이브러리 함수 사용법
- Match : 문자열 처음부터 정규식과 매칭되는 패턴을 찾아서 리턴
- Search : 문자열 전체를 검색해서 정규식과 매칭되는 패턴을 찾아서 리턴
- FindAll : 정규표현식과 매칭되는 모든 문자열을 리스트 객체로 리턴
- Split : 찾은 정규표현식 패턴 문자열을 기준으로 문자열을 분리
- Sub : 찾은 정규표현식 패턴 문자열을 다른 문자열로 변경
- 추출해야하는 정규표현식이 대부분 정해져 있는(한정되어있는) 경우가 많음
- (ex) 전화번호, 생년월일, 정수만 가져오는 경우
'AI & DS > 머신러닝' 카테고리의 다른 글
[데이터분석] 데이터 크롤링 실습(2) - 인프런 크롤링 (0) | 2024.08.14 |
---|---|
[데이터분석] 데이터 크롤링 실습(1) (0) | 2024.08.14 |
[머신러닝] - 머신러닝의 개념 및 종류 (0) | 2024.08.13 |
[데이터분석] 타이타닉 데이터셋 전처리 실습 (1) | 2024.08.13 |
[데이터분석] 데이터 전처리 - Kaggle API 인증하기 (0) | 2024.08.13 |