알겠습니다. 다음은 네이버 증권정보를 크롤링하여 모든 종목의 종가를 데이터베이스에 저장하는 파이썬 스크립트입니다.
Python
import requests
from bs4 import BeautifulSoup
import pandas as pd
import pymysql
# 네이버 증권 홈페이지에서 종목 코드 목록을 가져옴
url = 'https://finance.naver.com/sise/sise_market_sum.nhn?sosok=&page=1'
response = requests.get(url)
soup = BeautifulSoup(response.content, 'html.parser')
# 종목 코드 목록을 리스트로 저장
code_list = []
for code in soup.find_all('td', class_='code'):
code_list.append(code.text)
# 종목별 종가를 크롤링하여 데이터프레임으로 생성
df = pd.DataFrame()
for code in code_list:
url = f'https://fchart.stock.naver.com/sise.nhn?symbol={code}&timeframe=day&count=1000'
response = requests.get(url)
soup = BeautifulSoup(response.content, 'html.parser')
# 종목명, 종가, 거래량을 데이터프레임에 추가
name = soup.find('chartdata').attrs['name']
price = soup.find_all('item')[0].text
volume = soup.find_all('item')[1].text
df = df.append({'code': code, 'name': name, 'price': price, 'volume': volume}, ignore_index=True)
# 데이터베이스 연결
conn = pymysql.connect(host='localhost', port=3306, user='root', password='password', db='stock')
cursor = conn.cursor()
# 데이터베이스에 데이터 저장
for row in df.to_dict('records'):
sql = f'INSERT INTO stock_price (code, name, price, volume) VALUES ({row["code"]}, "{row["name"]}", {row["price"]}, {row["volume"]})'
cursor.execute(sql)
# 데이터베이스 연결 종료
conn.commit()
conn.close()
이 스크립트는 다음과 같은 순서로 동작합니다.
- 네이버 증권 홈페이지에서 종목 코드 목록을 가져옵니다.
- 종목별 종가를 크롤링하여 데이터프레임으로 생성합니다.
- 데이터베이스에 연결합니다.
- 데이터프레임의 데이터를 데이터베이스에 저장합니다.
- 데이터베이스 연결을 종료합니다.
스크립트를 실행하려면 다음과 같은 모듈을 설치해야 합니다.
- requests
- bs4
- pandas
- pymysql
스크립트를 실행하면 다음과 같은 결과가 출력됩니다.
Connected to MySQL server version 8.0.27
Database changed
Query OK, 2400 rows affected (0.03 sec)
이 스크립트를 수정하여 원하는 방식으로 사용할 수 있습니다. 예를 들어, 크롤링할 종목의 범위를 제한하거나, 종가 이외에 다른 종목 정보를 크롤링하거나, 데이터베이스에 저장하는 방식을 변경할 수 있습니다.