정적인 주가 데이터를 크롤링하는 방법
만약 주식 데이터가 정적인 형태로 제공된다면, 실습 화면의 예시와 같이 requests
와 BeautifulSoup
라이브러리만으로도 웹 크롤링을 진행할 수 있습니다.
이번 수업에서는 이 링크와 같은 가상 주식 데이터 표 내부의 데이터를 크롤링하는 방법을 알아보겠습니다.
회사명 | 현재가 | 전일대비 | 등락률 |
---|---|---|---|
회사 A | 1064 | 26 | 2.44% |
회사 B | 1458 | -35 | -2.40% |
회사 C | 1991 | 49 | 2.46% |
회사 D | 2595 | 22 | 0.85% |
회사 E | 3074 | -36 | -1.17% |
회사 F | 598 | 2 | 0.33% |
예시로 제시된 표의 데이터는 새로고침을 하지 않는 한 변하지 않는 정적인 데이터입니다.
코드 설명
앞서 배운 requests와 BeautifulSoup 라이브러리를 사용해 크롤링을 하는 과정은 비슷하지만, response.encoding = "utf-8"
을 통해 한글 데이터를 정상적으로 가져올 수 있도록 설정해야 합니다.
또한 find("td", {"class": "company-cell"})
, find_all("tr")
와 같이 find 메서드 심화 사용법을 알아보겠습니다.
Step 1
웹 페이지 HTML 가져오기
response = requests.get(url)
response.encoding = "utf-8"
html_content = response.text
requests.get(url)
: 지정된 URL로부터 웹 페이지의 데이터를 요청하고 응답을 받습니다.response.encoding = "utf-8"
: 응답의 인코딩을 UTF-8로 설정하여 한글 등의 문자가 깨지지 않도록 합니다.html_content = response.text
: 응답으로 받은 HTML 컨텐츠를 텍스트로 저장합니다.
Step 2
HTML 파싱
soup = BeautifulSoup(html_content, "html.parser")
BeautifulSoup
객체를 생성하여 HTML 컨텐츠를 파싱합니다. 이로써 HTML 요소에 쉽게 접근할 수 있게 됩니다.
Step 3
stock_table = soup.find("table", {"id": "stock-table"})
soup.find()
메서드를 사용해 HTML에서 주식 데이터가 담긴 테이블 요소(<table id="stock-table">
)를 찾습니다.
Step 4
테이블 내 데이터 추출
for row in stock_table.find("tbody").find_all("tr"):