[웹크롤링, 파싱]프로세싱을 활용하여 벅스 음악차트 파싱하기

Parsing links from Bugs Music Chart : Data Parsing with Processing 
(Data Parsing / Web Crawling)




프로세싱을 활용하여 벅스 뮤직 차트에서 각 음악에 대한 상세 정보데이터 링크를 가져오는 소스입니다.
XML 파싱이 아니라 String를 이용한 이유는 XML파싱을 하면 오류가 뜨기 때문인데요
페이지에 있는 <,> 기호로 인해서 그렇다고 하네요... 
다행히 페이지에서 "trackInfo"만 검색해도 링크가 있는 위치를 찾을 수 있어서 
String클래스만 가지고 링크를 가져올 수 있었습니다.

현재 진행중인 프로젝트라 아직까지 다른 정보는 안가져오고 링크만 단순하게 가져오는 상태입니다. 추후에 각 링크마다 표시되는 노래가사를 불러올 수 있도록 하려고 합니다.






차트의 링크를 크롬 개발자도구를 이용하여 확인해봤습니다.
<a class="trackInfo" href="~~~" > 링크 </a> 와같은 주소로 되어있겠네요.




XML파싱이 잘 안돼서 직접 소스보기를 하여, trackInfo를 검색해보니
<a>태그에 trackInfo가 있는건 찾으려고 하는링크가 있는 부분밖에는 없었습니다.



그래서 아래와 같이 trackinfo와 href를 이중으로 검색하여, 링크가 있는 줄만 얻습니다.

 if (links[i].contains("trackInfo")) {
      if (links[i].contains("href")) {
      ...
      }
    }



그리고는 주소가 있는 부분만 잘라냅니다.
백슬래쉬기호와 함께 \"로 써야  따옴표(")가 입력됩니다.

links[i] = links[i].split("href=\"")[1];
links[i] = links[i].split("\" class")[0];



print(), println()으로 출력하면, 아래처럼 콘솔에 링크가 나옵니다.






<Source Code>

int count;
int date = 20171201;
String url = "https://music.bugs.co.kr/chart/track/day/total?chartdate=" + date;

void setup() {
  String[] links = loadStrings(url);
  // Get rid of the array in order to search the whole page
  //String html = "<a></a>";
  for (int i = 0; i < links.length; i++) {
    if (links[i].contains("trackInfo")) 
    {
      if (links[i].contains("href")) 
      {
        count++;
        links[i] = links[i].split("href=\"")[1];
        links[i] = links[i].split("\" class")[0];
        print(count); print(". ");
        println(links[i]);
      }
    }
  }
}

댓글