1. 사이트 분석
먼저 사이크 분석을 위해 네이버 증권 사이트에 접속한다.
이때 파라미터로 "105560"이라는 코드를 넘겨주는 것을 확인할 수 있다. 이 코드는 "국민은행"의 코드로 만약 다른 기업의 정보를 검색하면 해당 코드가 변경될 것이다. 따라서 우리는 해당 값을 변경함으로써 여러 기업의 주식 데이터를 수집할 수 있다.
그리고 나는 주식 데이터의 현재가에 대해 크롤링하려고 한다. 이때 현재가 값이 적힌 태그의 id는 "_nowVal"인 것을 확인했다.
해당 예제를 위해 다음과 같이 코드를 작성할 수 있다.
import requests
from bs4 import BeautifulSoup
codesDict = {
"국민은행": "105560",
"기업은행": "024110"
}
for company, code in codesDict.items():
url = "https://finance.naver.com/item/sise.naver?code={}".format(code)
response = requests.get(url)
html = response.text
soup = BeautifulSoup(html, "html.parser")
nowPrice = soup.select_one("#_nowVal").text
nowPrice = nowPrice.replace(',', '')
print("{}의 현재가: {}".format(company, nowPrice))
해당 코드의 결과는 다음과 같다.
2. 액셀 활용
위처럼 크롤링한 데이터를 액셀로 저장하면 편할 것이다. 이를 위해 파이썬에서는 액셀을 쉽게 다룰 수 있도록 openpyxl이라는 라이브러리를 제공한다. 설치는 다음과 같이 진행하면 된다.
pip install openpyxl
관련 메서드는 다음과 같은 것들이 있다.
메서드 | 기능 | 사용법 |
openpyxl.Workbook() | 액셀파일(Workbook) 객체 생성 | wb = openpyxl.Workbook |
wb.create_sheet('시트 이름') | 시트 생성 | ws = wb.create_sheet('sheet1') |
wb.active | 현재 선택되어 있는(활성화된) 시트를 가져옴 | ws = wb.active |
wb['시트 이름'] | 기존에 있던 시트의 이름으로 시트를 불러옴 | ws = wb['sheet1'] |
ws['(열)(행)'] = (원하는 값) | 원하는 행, 열에 값 작성 | ws['A1'] = 0 |
ws.append(원하는 값) | 행 단위로 값 추가 | ws.append([1, 2, 3]) |
ws.cell(행, 열, 값) | 셀 단위로 값 추가 | ws.cell(1, 3, '1행 3열') |
openpyxl.load_workbook('경로') | 기존 액셀파일 불러오기 | wb = load_workbook("test.xlsx") |
ws['(열)(행)'].value | 셀 주소로 값 불러우기 | ws['A1'].value |
ws.cell(행, 열).value | 셀 좌표로 값 불러오기 | ws.cell(1, 3).value |
wb.save('경로') | 엑셀파일 객체 저장 | wb.save("test.xlsx") |
위를 활용해 이전 코드를 아래와 같이 수정할 수 있다.
import openpyxl
import requests
from bs4 import BeautifulSoup
codesDict = {
"국민은행": "105560",
"기업은행": "024110"
}
workbook = openpyxl.Workbook()
sheet = workbook.create_sheet("2024.04.01 주식 데이터")
sheet['A1'] = "기업이름"
sheet['B1'] = "현재가"
for index, companyName in enumerate(codesDict):
url = "https://finance.naver.com/item/sise.naver?code={}".format(codesDict[companyName])
response = requests.get(url)
html = response.text
soup = BeautifulSoup(html, "html.parser")
nowPrice = soup.select_one("#_nowVal").text
nowPrice = int(nowPrice.replace(',', ''))
sheet.cell(index+2, 1, companyName)
sheet.cell(index+2, 2, nowPrice)
workbook.save("주식 현재가 데이터.xlsx")
해당 코드로 생성된 엑셀 파일의 내용은 다음과 같다.
'DB > Crawling' 카테고리의 다른 글
6. word 활용 (python-docx) (0) | 2024.04.06 |
---|---|
5. 네이버 뉴스 본문 크롤링 (0) | 2024.04.06 |
4. 셀레니움 기본 개념 (네이버 로그인, 네이버 쇼핑 상품 크롤링) (0) | 2024.04.01 |
2. 네이버 뉴스 데이터 수집 (페이지 가져오기) (0) | 2024.04.01 |
1. 크롤링 기본 (Request, BeautifulSoup 소개 및 CSS 선택자) (0) | 2024.03.31 |