지난 시간엔…

  • 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