• 카테고리

    질문 & 답변
  • 세부 분야

    데이터 분석

  • 해결 여부

    미해결

axios와 cheerio로 노래 목록 가져오기

21.12.04 02:17 작성 조회수 403

0

제로초님 안녕하세요. 강사님의 'axios-cheerio 로 첫 크롤링하기 '편을 보고 직접 다뤄보고자 응용해보던 중, 원하는 결과가 나오지 않아 질문을 올리게 되었습니다.

저는 해당 사이트(네이버 바이브)에서 `.track_section .select_all .text_area .text`에 있는 총 곡 수를 받아와 `songsNum`이라는 변수에 저장하고, `songsNum`수만큼 반복문을 돌려 크롤링한 노래 제목과 아티스트 정보를 배열에 따로 저장하여, json 형식으로 제작하고자 합니다.

그러나 하단의 제가 작성한 코드에서 처럼 `$('.track_section .select_all .text_area .text').text();`나 `$('. track_section .text').text();`등을 통해 text값을 가져오려고 해도 값이 가져와지지 않습니다. 뿐만아니라, 노래 제목과 아티스트명을 `$(선택자).text()`를 이용해서 가져오려고 해도 전부 공백이 뜹니다. 

nodemon을 돌리면서 console.log()로 값이 제대로 가져와지는지 확인하고 있는데, 아래의 사진처럼 계속 공백이 나옵니다. 

소스코드

const fs = require('fs');
const axios = require('axios');
const cheerio = require('cheerio');

let vibeUrl = fs.readFileSync('./data/vibe.txt').toString();

let title = new Array();
let artists = new Array();

const crawler = async() => {
    const response = await axios.get(vibeUrl);
    if(response.status === 200) {
        const html = response.data;
        const $ = cheerio.load(html);
        const songsNum = $('.track_section .select_all .text_area .text').text();
        console.log(songsNum);

        // for(let i = 0; i < songsNum; i++) {

        // }
    }
}

crawler();

혹시 선택자를 어떻게 이용해야 제가 원하는 값들을 가져올 수 있을지 여쭤보아도 될까요?

답변 1

답변을 작성해보세요.

0

axios는 정적 사이트에서만 쓸 수 있습니다. 지금 확인해보니 바이브는 동적 사이트라서 나중에 배우는 puppeteer로 스크래핑 하셔야 합니다.

muz님의 프로필

muz

질문자

2021.12.04

답변 감사합니다! 얼른 puppeteer 강의 들어보고, 다시 시도해봐야겠어요!ㅎㅎ