지난 시간엔…
- axios 로 결과 받아오기
- 파싱이 귀찮아서 중단
역사는 반복되고..
npm install -P cheerio
그냥 쓰던 것을 써야겠다.
cheerio 는 왜 인가가 덜할까?
무튼 일단 그냥 HTML 패턴을 확인해보자
<div class="ct_box opinion">
<div class="graph_area _graph_area step4">
<div class="graph_base">
<div class="graph_data _graph_data">
<span class="data_lyr _data_lyr" style="left:69%">
3.95
<span class="arrow"></span>
</span>
</div>
</div>
</div>
<div class="goal_area">
<span class="goal_stock">
<span class="goal">목표주가</span>
<em class="stock_price">105,909<span class="type">원</span></em>
</span>
</div>
대량 이런 식이다.
그렇다면 비율과 값은 간단하게 얻어올 수 있다.
const $ = cheerio.load(html_content);
const rates = $('span.data_lyr._data_lyr');
const stock_prices = $('em.stock_price');
값에 ,
가 끼어 있어 귀찮아 지지만 이때는 Lodash 를 믿어보자.
ReplaceAll 이 있으면 좋겠다만…
const result = _.parseInt(_.join(_.split(stock_prices.text(), /,|원/i), ""));
항상 검색하고 없는 것을 알게 된다.
하 그냥 PR 올릴까?
아니다 귀찮다.
안하는 데는 이유가 있겠지…
const result = await getItemList(ListCount);
const itemList = result.itemList;
await _.forEach(itemList, async (item) => {
try {
const code = item.cd;
const overallInfo = await getOverallInfo(code);
const goal = getGoal(overallInfo);
const rate = _.floor((goal/item.nv*100)-100, 2);
if (rate > 45 && !_.includes(item.nm, "우")) {
console.log(`name : ${item.nm} value: ${item.nv} goal: ${goal} ${rate}`);
}
} catch (error) {
console.error(error);
}
});
대강 45% 이상 오를것 같지만 우선주가 아닌 것을 간단하게 구별해 봤다.
역시 기술 배우라는 아버지 말이 틀린 것이 없네.
근데 이거 계속 로컬에서 돌릴건가?
너무 귀찮다.
그리고 코드도 지저분해서
더 미니멀하게 바꾸고 싶어졌다.
EOF