NODEJSと操り人形によるサッカーデータのスクレーピング


私は最近スポーツデータを必要とする状況にありました-特にサッカーデータ.私はいくつかの初期の問題を克服しなければならなかったので、私はこのポストを書いています.あなたは私の考えに従うことができなければならない.
このチュートリアルでは、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ファイルを開いた後、私はすぐに、元のウェブサイトに表示されたすべての試合情報は、行方不明だったことに気づいた.これはJavaScriptによってレンダリングされるコンテンツを期待していたので、大きな驚きではなかった.
上記のスクリプトがNODEJSで書かれているので、私はPitpeteerで遊び始めました.そして、それはヘッドレスクロームまたはクロムを制御するために、高レベルAPIを提供するノード・ライブラリです.
しばらくして、次のコードを終えました.
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.comxmlsoccer.com)を選ぶかもしれません.
ハッピー掻き取り