이번 글에서는 웹 스크래핑에 대해서 알아볼 것입니다.
과거에는 원하는 정보를 수동으로 웹에서 복사하거나 이미지를 다운로드하는 것이 일반적이었지만, 수집하려는 데이터가 많아질수록 이런 작업은 비효율적이고 시간이 오래 걸립니다. 예를 들어, 수백 개의 뉴스 기사나 수천 장의 이미지를 수동으로 저장하려면 엄청난 시간이 필요합니다.
하지만 이제 누구나 코딩을 배울 수 있고, 누구나 파이썬을 할 수 있게 많은 자료가 있습니다. 그래서 파이썬의 라이브러리 중 하나인 **BeautifulSoup**를 이용해서 가져오고 싶은 데이터를 스크래핑을 해보려고 합니다.
**BeautifulSoup**는 HTML 파일이나 XML 문서를 파싱해서 데이터를 추출하는 라이브러리입니다. 가볍고 빨라서 정적인 웹페이지의 HTML을 처리하기 좋습니다. 다만, 동적 웹페이지는 처리하지 못해서 동적 웹페이지에서는 **BeautifulSoup**가 아닌 **Selenium**을 사용하는데, 이번에는 **BeautifulSoup**를 사용할 예정입니다.
| 특징 | BeautifulSoup | Selenium |
|---|---|---|
| 처리 대상 | 정적 웹페이지 (HTML/XML) | 동적 웹페이지 (자바스크립트) |
| 속도 | 빠름 | 느림 (실제 브라우저 실행) |
| 리소스 소비 | 낮음 | 높음 (브라우저 실행으로 인한 리소스 사용) |
| 사용 난이도 | 쉬움 | 다소 복잡함 |
| 웹 상호작용 | 불가 | 가능 (클릭, 입력, 스크롤 등) |
| HTTP 요청 | Requests와 같은 추가 도구 필요 | 자체적으로 브라우저 내에서 처리 |
| 적합한 작업 | 대규모 데이터 수집, 빠른 스크래핑 작업 | 동적 콘텐츠 처리, 웹 테스트, 상호작용 작업 |
진행했던 프로젝트 중에 뉴스 기사를 토대로 주가의 방향을 예측하는 프로젝트가 있었는데, 그러기 위해서는 코스피 시총 상위 100개 기업에 대한 뉴스를 수집했어야 했습니다. 그래서 **BeautifulSoup**를 이용해서 네이버에 있는 기업 관련된 뉴스를 스크래핑을 하려고 합니다.
**BeautifulSoup**는 **Selenium**과는 다르게 별도의 브라우저 드라이브 설치 없이 라이브러리만 설치하면 바로 사용할 수 있습니다.
pip install beautifulsoup4
**BeautifulSoup**를 설치하고, 요구사항에 맞게 실제 데이터를 스크래핑 시작하겠습니다.
먼저 수집해야 할 코스피 상위 100개 기업의 리스트를 가져오려고 합니다. 한국거래소에서 각 기간별 코스피 기업을 확인할 수 있고, 그곳에서 csv로 데이터를 이미 추출한 상황입니다. 그래서 아래 코드를 토대로 실제 코스피 기업 목록 100개를 가져와봅시다.
import pandas as pd
company = pd.read_csv('./raw/19년 1월 2일 기준(코스피).csv',encoding='utf-8')
company_list = company.iloc[:100,]['종목명'][0:100] # 시총 상위 100개 기업 리스트