오늘은 웹 크롤링, 웹 스크래핑에 대한 교육에 앞서, 그에 대한 이론과 실습을 진행하였습니다!!
예전에.. 아주 먼 옛날.. 셀레니움으로 크롤링을 한 번 해본 경험이 있던 것 같긴한데... 까마득해요..
또 데이터 관리 인턴 시절.. 인턴 동기끼리 크롤링? 스크래핑? 을 통해 여러 간단한 프로그램도 만들어봤는데, 사실상 백지 상태인거같아요 ㅋㅋㅋㅋ
오늘 배운 내용은 실습 및 개념 위주라 개념과 BeautilfulSoup를 어떻게 사용하는 지 간단하게 코드를 정리해보았습니다!
개념 및 정리
- Web : 인터넷에서 정보를 교환할 수 있는 하나의 플랫폼!
- 웹 페이지는 HTML 형식으로 되어있고, 웹 브라우저는 클라이언트가 HTTP 요청을 보낸 후, 응답받은 HTML 코드를 랜더링 해준다!
- 웹 크롤링 vs 웹 스크래핑
- 웹 스크래핑 : 웹 페이지로부터 원하는 정보를 추출 -> 특정한 목적으로 특정 웹 페이지에서 데이터를 추출하는 작업!!
- 웹 크롤링 : 크롤러를 이용해서 웹 페이지의 정보를 인덱싱 -> url 안에 어떤 정보가 있는지 url을 타고다니며 반복적으로 데이터를 가져오는 데이터 색인!!
- REP(로봇 배제 프로토콜) : 사람이 아닌 로봇의 무분별한 요청을 막기 위해 등장!
- robots.txt
- User-agent, Disallow, Allow 등의 키워드를 통해 사용!
- User-agent : 규칙이 적용되는 대상 사용자 에이전트
- Disallow : 크롤링을 금지할 웹 페이지
- Allow : 크롤링을 허용할 웹 페이지
- DOM(Document Object Model) : 웹 문서의 구조화된 표현
- 트리 형태로 구성
- DOM 트리를 순회하며 원소 추가 및 탐색 가능!
- 각 노드를 객체로 구성하여 문서를 더욱 편리하게 관리 가능!
- 브라우저가 HTML을 DOM으로 바꾸는 이유!!
- 원하는 요소를 동적으로 변경 가능해짐!!
- 원하는 요소를 쉽게 탐색 가능!!
- 트리 형태로 구성
- BeautifulSoup
- 파이썬으로 HTML을 분석하게 해주는 HTML parser!
- 요소를 가져왔는데 깨질 경우! -> dict에 접근하듯이 dict[key] 형태로 접근!
from bs4 import BeautilfulSoup import requests res = requests.get("탐색하고자 하는 url") soup = BeautifulSoup(res.text, "html.parser") # 분석된 html을 가독성 좋게 보여주는 prettify()를 사용! print(soup.prettify()) # title 탐색 soup.title # head 탐색 soup.head # body 탐색 soup.body # 특정 태그로 감싸진 요소 하나 찾기! temp = soup.find("태그 명!") # 특정 태그로 감싸진 요소 모두 찾기! soup.find_all("태그 명!") # 태그 명 출력 temp.name # 태그 내용 출력 temp.text
정적 웹 사이트의 경우 HTML 문서가 완전하게 응답되지만, 동적 웹 사이트의 경우 HTML이 렌더링 될 때까지 지연시간이 존재하는데 이런 경우는 어떻게 해야할까??
- 동적 웹사이트는 자바스크립트를 통한 비동기 처리를 하기 때문에 앞선 BeautilfulSoup의 html.parser로 HTML 문서를 완전하게 가져올 수 없는 경우가 발생한다..!
- 파이썬으로 이러한 데이터를 모두 가져오기 위해 할 수 있는 방법? -> 웹 브라우저를 파이썬으로 조작할 수 있는 Selenium을 사용하자!!!
- 셀레니움은 UI와의 상호작용이 가능!!!
- 파이썬으로 이러한 데이터를 모두 가져오기 위해 할 수 있는 방법? -> 웹 브라우저를 파이썬으로 조작할 수 있는 Selenium을 사용하자!!!
회고
기술도 중요하지만, 웹 크롤링과 웹 스크래핑은 저작권, 데이터 문제 및 서버 과부화 문제가 발생할 수 있으므로 조심해야한다는 점을 다시 한 번 중요하게 알고 가는 강의였습니다!
실습도 좋고 강의도 좋게 짜여있지만, 아쉬운 점은 다른 데브코스 과정의 리뷰에서와 동일하게 강의의 최신화가 덜 되어있다는 점 같아요.
실습 타겟 사이트가 사라졌거나, 이전에 vscode 환경 설정을 했는데 갑자기 주피터 노트북을 쓴다던가 하는 점...
또 강의 시간이 애매하게 짜여있다는 점 같아요.
어떤 날은 8시간 전부를 투자해도 부족한 경우가 있지만, 어떤 날은 3시간만 투자해도 끝나는 경우가 있는 점이 아쉬운 것 같아요.
그렇다해서 강의 질이 떨어지거나 커리큘럼이 별로인 건 아닙니다!!
제가 대화해 본 분들만 해도 스펙이 후덜덜하고.. 기초적인 부분과 꼭 알고가야하는 부분은 모두 짚어주거든요!!
제 경험상이지만, 아직까지는 강추인 과정입니다!!
'데이터 엔지니어링 데브코스' 카테고리의 다른 글
[데이터 엔지니어링 데브코스 4기] 4주차 10/8 TIL (2) | 2024.10.08 |
---|---|
[데이터 엔지니어링 데브코스 4기] 4주차 10/7 TIL (2) | 2024.10.07 |
[데이터 엔지니어링 데브코스 4기] 3주차 10/4 TIL (2) | 2024.10.04 |
[데이터 엔지니어링 데브코스 4기] 3주차 10/1 TIL (1) | 2024.10.01 |
[데이터 엔지니어링 데브코스 4기] 1주차 WIL (0) | 2024.09.29 |