웹에서 가사를 자동으로 가져옵니다.
기술
기술
버전
Nodejs
10.14.1
Puppeteer
1.12.2
준비
npm init
-> npm i puppeteer
쓰기 Puppeteer API
page.evaluate 만 사용하기 때문에 다른 API는 여기에서 참조하십시오.
개발
각 노래는
의 "e-item"에 있습니다.
- txt-primary _trackLink 클래스가 있는 : 노래 이름- href: 노래 세부정보 링크 2. Google 크롬 콘솔에서 스크립트를 사용해 보세요.let songs = document.getElementsByClassName('e-item'); songs = [...songs]; let array = songs.map(song => ({ title: song.getElementsByClassName('txt-primary _trackLink')[0].innerHTML.trim(), url: song.getElementsByClassName('txt-primary _trackLink')[0].href })); 결과
이미지와 같은 결과가 나오면 성공입니다.
3. 다음은 웹에서 가사 검색 스크립트를 시도합니다
가사는 fn-wlyrics fn-content의 클래스가 있는
결국 다음과 같은 결과가 나온다
요약
- txt-primary _trackLink 클래스가 있는 : 노래 이름- href: 노래 세부정보 링크 2. Google 크롬 콘솔에서 스크립트를 사용해 보세요.let songs = document.getElementsByClassName('e-item'); songs = [...songs]; let array = songs.map(song => ({ title: song.getElementsByClassName('txt-primary _trackLink')[0].innerHTML.trim(), url: song.getElementsByClassName('txt-primary _trackLink')[0].href })); 결과
이미지와 같은 결과가 나오면 성공입니다.
3. 다음은 웹에서 가사 검색 스크립트를 시도합니다
가사는 fn-wlyrics fn-content의 클래스가 있는
입니다.
또한
가 있으므로 replace를 사용하여 생략합니다.
스크립트: document.getElementsByClassName('fn-wlyrics fn-content')[0].innerHTML.replace(/\<br\>/g,"")
결과
4. 이제 index.js를 작성합니다. 가사는 파일에 저장합니다.
index.js
const puppeteer = require('puppeteer');
const fs = require('fs');
(async()=>{
const browser=await puppeteer.launch({headless:true});
const page=await browser.newPage();
await page.goto('https://mp3.zing.vn/zing-chart-tuan/bai-hat-US-UK/IWZ9Z0BW.html');
const songs = await page.evaluate(() => {
let songs = document.getElementsByClassName('e-item');
songs = [...songs];
let array = songs.map(song => ({
title: song.getElementsByClassName('txt-primary _trackLink')[0].innerHTML.trim(),
url: song.getElementsByClassName('txt-primary _trackLink')[0].href
}));
return array;
});
for(let song of songs){
await page.goto(song.url);
let lyric = await page.evaluate(()=>{
const evaluatedLyric = document.getElementsByClassName('fn-wlyrics fn-content')[0];
// 歌詞はいつもあるわけではないので、条件をチェック
if (evaluatedLyric !== undefined) {
return evaluatedLyric.innerHTML.replace(/\<br\>/g,"");
} else return "歌詞無し";
});
await fs.writeFile(`songs/${song.title}.txt`,lyric,function(err){
if(err) throw err;
console.log("取得: "+song.title);
});
}
await browser.close();
})();
결국 다음과 같은 결과가 나온다
요약
이 방법은 매우 간단하지만 HTML 구축 분석이 필요하기 때문에 때로는 싫어할 수 있습니다. 그래서 사용하기 전에 주의해야 합니다.
Reference
이 문제에 관하여(웹에서 가사를 자동으로 가져옵니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/lampt/items/0d3155d5be803f1b5258텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)