Nodejs와 Puppeteer로 축구 데이터 스크랩하기
이 튜토리얼을 위해 나는 많은 리그를 제공하고 경기와 라이브 경기를 다루는 웹사이트 fleshscore.com을 발견했습니다.
다음 기본 스크립트로 시작했습니다.
const axios = require('axios');
//performing a GET request
axios.get('https://www.flashscore.com/')
.then(response => {
//handling the success
const html = response.data;
console.log(response.data);
})
//handling error
.catch( error => {
console.log(error);
});
스크립트에서 반환되는 내용을 조사하기 위해 반환된 모든 콘텐츠를
test.html
파일로 전달했습니다.node scraper.js > test.html
내 브라우저에서 HTML 파일을 연 후, 원래 웹사이트에 표시된 모든 경기 정보가 누락되었음을 금방 깨달았습니다. 콘텐츠가 자바스크립트에 의해 렌더링될 것으로 예상했기 때문에 이는 그리 놀라운 일이 아닙니다.
위의 스크립트는 nodejs로 작성되었으므로 headless Chrome 또는 Chromium을 제어하기 위한 고수준 API를 제공하는 노드 라이브러리인 puppeteer를 가지고 놀기 시작했습니다.
얼마 후, 나는 다음과 같은 코드 조각으로 끝났습니다.
const puppeteer = require ('puppeteer');
//initiating Puppeteer
puppeteer
.launch ()
.then (async browser => {
//opening a new page and navigating to Fleshscore
const page = await browser.newPage ();
await page.goto ('https://www.flashscore.com/');
await page.waitForSelector ('body');
//manipulating the page's content
let grabMatches = await page.evaluate (() => {
let allLiveMatches = document.body.querySelectorAll ('.event__match--oneLine');
//storing the post items in an array then selecting for retrieving content
scrapeItems = [];
allLiveMatches.forEach (item => {
let postDescription = '';
try {
let homeTeam = item.querySelector ('.event__participant--home').innerText;
let awayTeam = item.querySelector ('.event__participant--away').innerText;
let currentHomeScore = item.querySelector('.event__scores.fontBold span:nth-of-type(1)').innerText;
let currentAwayScore = item.querySelector('.event__scores.fontBold span:nth-of-type(2)').innerText;
scrapeItems.push ({
homeTeam: homeTeam,
awayTeam: awayTeam,
currentHomeScore: currentHomeScore,
currentAwayScore: currentAwayScore,
});
} catch (err) {}
});
let items = {
"liveMatches": scrapeItems,
};
return items;
});
//outputting the scraped data
console.log (grabMatches);
//closing the browser
await browser.close ();
})
//handling any errors
.catch (function (err) {
console.error (err);
});
이제 다음 명령을 사용하여 스크립트를 다시 실행했습니다.
node scraper.js
보시다시피 아름다운 JSON 데이터 목록을 검색했습니다.
물론 이제 리그, 국가 등으로 데이터를 정렬하는 데 사용할 수 있는 많은 작업이 있습니다.
내 사용 사례에는 이 스니펫으로 충분했습니다. 보다 심각한 스크래핑을 목표로 하는 경우 일반 스포츠 또는 축구 API(예: sportdataapi.com , xmlsoccer.com )를 선택하는 것이 좋습니다.
해피 스크래핑 :-)
Reference
이 문제에 관하여(Nodejs와 Puppeteer로 축구 데이터 스크랩하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/andreasa/scraping-soccer-data-with-nodejs-and-puppeteer-3mh2텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)