Open Junghun79 opened 2 years ago
먼저 read_naver() 함수의 5번째 줄과 19번째 줄에서 웹 페이지를 읽어올 때 requests.get() 함수의 인자로 브라우저 정보를 넘겨주셨는지 확인해 보시기 바랍니다.
브라우저 정보를 잘 넘겨주셨는데도 불구하고 10일치 데이터만 가져온다면 아래 코드에서 제가 "# ←" 표시를 해둔 것처럼 print() 함수로 일일이 데이터를 찍어가면서 원인을 찾아보셔야 할 것 같습니다.
def read_naver(self, code, company, pages_to_fetch):
"""네이버에서 주식 시세를 읽어서 데이터프레임으로 반환"""
try:
url = f"http://finance.naver.com/item/sise_day.nhn?code={code}"
html = BeautifulSoup(requests.get(url,
headers={'User-agent': 'Mozilla/5.0'}).text, "lxml")
pgrr = html.find("td", class_="pgRR")
if pgrr is None:
return None
s = str(pgrr.a["href"]).split('=')
lastpage = s[-1]
df = pd.DataFrame()
pages = min(int(lastpage), pages_to_fetch)
print("company :", company) # ←
print("lastpage :", lastpage) # ←
print("pages_to_fetch :", pages_to_fetch) # ←
for page in range(1, pages + 1):
pg_url = '{}&page={}'.format(url, page)
df = df.append(pd.read_html(requests.get(pg_url,
headers={'User-agent': 'Mozilla/5.0'}).text)[0])
tmnow = datetime.now().strftime('%Y-%m-%d %H:%M')
print('[{}] {} ({}) : {:04d}/{:04d} pages are downloading...'.
format(tmnow, company, code, page, pages), end="\r")
df = df.rename(columns={'날짜':'date','종가':'close','전일비':'diff'
,'시가':'open','고가':'high','저가':'low','거래량':'volume'})
df['date'] = df['date'].replace('.', '-')
df = df.dropna()
df[['close', 'diff', 'open', 'high', 'low', 'volume']] = df[['close',
'diff', 'open', 'high', 'low', 'volume']].astype(int)
df = df[['date', 'open', 'high', 'low', 'close', 'diff', 'volume']]
print("\n", df.head(), "\n", df.tail(), "\n", df.describe()) # ←
except Exception as e:
print('Exception occured :', str(e))
return None
return df
정상적인 경우에는 아래처럼 표시가 될 것입니다.
company : 동화약품
lastpage : 634
pages_to_fetch : 100
[2021-10-04 21:12] 동화약품 (000020) : 0100/0100 pages are downloading...
date open high low close diff volume
1 2021.10.01 18100 20100 18000 19600 1750 9217856
2 2021.09.30 19600 21450 17550 17850 700 16811805
3 2021.09.29 16100 19200 15950 18550 2050 10756122
4 2021.09.28 17650 19600 16450 16500 1550 6178907
5 2021.09.27 17650 18600 17050 18050 100 2982393
date open high low close diff volume
9 2017.09.11 8760 9090 8730 8940 230 141043
10 2017.09.08 8890 8900 8710 8710 160 87628
11 2017.09.07 8710 8880 8710 8870 270 87084
12 2017.09.06 8670 8840 8590 8600 110 129728
13 2017.09.05 8810 8850 8670 8710 90 108670
open high low close diff volume
count 1000.000000 1000.000000 1000.000000 1000.000000 1000.000000 1.000000e+03
mean 12249.910000 12552.000000 11967.980000 12227.735000 273.030000 5.767250e+05
std 4454.623077 4710.937543 4241.911377 4422.843864 443.280348 1.763314e+06
min 4900.000000 5170.000000 4800.000000 4985.000000 0.000000 7.387000e+03
25% 9340.000000 9467.500000 9150.000000 9320.000000 50.000000 7.396775e+04
50% 10650.000000 10850.000000 10350.000000 10600.000000 150.000000 1.587910e+05
75% 14950.000000 15150.000000 14700.000000 14900.000000 300.000000 3.705312e+05
max 30350.000000 34450.000000 29150.000000 30300.000000 5900.000000 1.811075e+07
[2021-10-04 21:12] #0001 동화약품 (000020) : 1000 rows > REPLACE INTO daily_price [OK]
만일 read_naver() 함수에서 df를 찍어봤을 때에도 이상이 없다면 replace_into_db() 함수 내부에서 DB에 데이터를 기록하는 과정에서 이상이 있을 수 있으므로 해당 함수 내부에서도 디버깅용 데이터를 찍어보면서 원인을 찾아보시기 바랍니다.
100페이지를 하려고 100으로 수정한뒤에 DBUpate를 해보고있는데 100까지 카운트는 되지만 실제 데이터를 읽어오는건 1page의 10일치만 가져오더라구요. 혹시 이건 어떤걸 수정해봐야할까요?