파이썬 데이터프레임에서 숨겨진 자료 찾기와 관련된 질문입니다.
조회수 562회
import pandas as pd
import requests
from bs4 import BeautifulSoup
from datetime import datetime
# code 설정
code = '005930'
# 무위험이자율 계산
ke_url = "https://www.kisrating.com/ratingsStatistics/statics_spread.do"
ke_res = requests.get(ke_url)
ke_df = pd.read_html(ke_res.text)
ke = float(ke_df[0].iloc[10, 8])
# 자료를 가져오는 영역 : snapshot과 재무제표만 가져오기
snapshot_url = "http://comp.fnguide.com/SVO2/ASP/SVD_Main.asp?pGB=1&gicode=A{}&cID=&MenuYn=Y&ReportGB=&NewMenuID=101&stkGb=701".format(code)
snapshot_res = requests.get(snapshot_url)
snapshot_df = pd.read_html(snapshot_res.text)
fs_rpt_url = "http://comp.fnguide.com/SVO2/ASP/SVD_Finance.asp?pGB=1&gicode=A{}&cID=&MenuYn=Y&ReportGB=&NewMenuID=103&stkGb=701".format(code)
fs_rpt_res = requests.get(fs_rpt_url)
fs_rpt_df = pd.read_html(fs_rpt_res.text)
# 해당자료에서 NAN값을 0으로 바꾸는 작업
for i in range(len(snapshot_df)):
# snapshot_df[i] = df[i].apply(pd.to_numeric, errors = 'coerce') # 이건 매우 중요하다. 이걸 적용하면 문자로 된건 전부 Nan 값이 된다.
snapshot_df[i].fillna(0,inplace=True)
for i in range(len(fs_rpt_df)):
# fs_rpt_df[i] = df[i].apply(pd.to_numeric, errors = 'coerce') # 이건 매우 중요하다. 이걸 적용하면 문자로 된건 전부 Nan 값이 된다.
fs_rpt_df[i].fillna(0,inplace=True)
# fs_rpt_df[0] : 연결 손익계산서(연간)
# fs_rpt_df[1] : 연결 손익계산서(분기)
# fs_rpt_df[2] : 연결 손익계산서
print(fs_rpt_df[0].iloc[3, 0])
안녕하세요 파이썬 초보가 질문 드립니다.
제가 데이터를 스크랩핑하는 과정에서 숨겨진 데이터가 있어서 글을 올립니다.
코드를 실행하면 "판매비와관리비계산에 참여한 계정 펼치기" 라는 항목이 뜨는데요,
이게 실제 웹페이지에서는
"판매비와관리비 +"로 표시된 것입니다.
+버튼 눌렀을 때 나오는 자료가 필요한데 이건 어떻게 해야 가져올 수 있을까요?
답변 주시면 감사하겠습니다.
아 그리고 항상 답변 올려주시는 모든 분들께 감사드립니다.~ ^^
-
(•́ ✖ •̀)
알 수 없는 사용자 - 〉
1 답변
-
좀 운이 좋은 케이스 같은데, 해당 페이지 소스 자체를 받아보면 이런 식으로 되어 있습니다.
<tr id="p_grid1_4" class=" rwf acd_dep_start_close "> <th scope="row" class="l clf"> <div class=""><span class="txt_acd">판매비와관리비</span><a id="grid1_4" href="javascript:foldOpen('grid1_4');" class=" btn_acdopen"><span class="blind" id="span_grid1_4">계산에 참여한 계정 펼치기</span></a></div> </th> <td class="r">566,397</td> <td class="r">524,903</td> <td class="r">553,928</td> <td class="r">416,252</td> <td class="r">412,229</td> <td class="r cle">1.0</td> </tr> <tr class="c_grid1_4 rwf acd_dep2_sub" style="display:none;"> <th scope="row" class="l clf"> 인건비</th> <td class="r">67,972</td> <td class="r">64,514</td> <td class="r">64,226</td> <td class="r">51,701</td> <td class="r">49,271</td> <td class="r cle">4.9</td> </tr>
문제의 행은 DOM에는 존재하고, 다만 인라인 CSS를 통해 단순히 숨겨져 있음을 알 수 있죠.
javascript:foldOpen('grid1_4')
이 하는 일이 무엇일지는 너무나 명확하고요.그냥
rwf
클래스를 갖는tr
을 다 찾아서 순회하면서 파싱하시면 될거 같네요.
그 안의 첫번째th
의 텍스트 내용이 뭐냐를 가지고 처리를 분기하시면 될 듯합니다.- 답변감사드립니다. 그런데 혹시 fs_rpt_df[0] 이런 상태(확인해보니 이건 데이터 프레임이던데요)에서 가져올 방법은 없을까요? 알 수 없는 사용자 2021.2.6 22:55
- 글쎄 거기서부터는 좀 다른 문제 같고 제가 잘 모르겠습니다. 엽토군 2021.2.6 23:17
- 네 감사합니다.~~ 알 수 없는 사용자 2021.2.7 00:02
댓글 입력