Как почистить javascripted таблицу сайта fifa - PullRequest
0 голосов
/ 05 июня 2018

Для исследовательского проекта я хотел бы почерпнуть все результаты международных футбольных (футбольных) игр на веб-сайте fifa.Я использую R, чтобы сделать это.Однако, похоже, что таблицы, содержащие совпадения, генерируются с использованием javascript.Вот URL, который я хотел бы очистить:

http://www.fifa.com/live-scores/international-tournaments/fixtures-results/index.html#month5-2018

Я пытался использовать phantomjs для отображения страницы после рендеринга таблицы javascript, но в результирующем html таблицы, содержащие совпадениярезультаты до сих пор не даны.Это мой код:

    url = "http://www.fifa.com/live-scores/international- 
    tournaments/fixtures-results/index.html#month5-2018"

    writeLines(sprintf("
    var page = require('webpage').create();
    var fs = require('fs');
    var path = 'scrape.html'

    page.open('%s', function (status) {
      var content = page.content;
      fs.write(path, content, 'w')
      phantom.exit();
    });", url), con="scrape.js")

    system("./phantomjs.exe scrape.js")

1 Ответ

0 голосов
/ 05 июня 2018

Вам не нужно сканировать таблицу после того, как она построена, этот веб-сайт делает некоторые вызовы некоторым конечным точкам, подобным этим.

http://data.fifa.com/livescores/en/internationaltournaments/matches/m/byyearandmonth/2018/5

http://data.fifa.com/livescores/live/matches

Чтобы найти их, воспользуйтесь инспектором сети в браузере (нажмите клавишу f12).Проще всего выбрать jsons, которые строят эти таблицы, вместо того, чтобы выбирать таблицы после того, как они были построены.

edit: все данные, которые составляют таблицы, находятся на этих jsons, чтобы получить данные.сначала сделайте запрос на получение и загрузите содержимое веб-страниц, содержащих эти jsons.Когда вы проверите содержимое веб-страницы, вы увидите, что вы jsons, но они внутри функции, просто удалите это.

Например, в первой ссылке вы можете удалить _matchesByYearAndMonthCallback( и последние ), которые выходят из json.

После удаления вы получаете действительный json, который можно проанализировать внутри R с пакетами json.lite или json , проверьтедокументация.после использования одного из этих пакетов вы должны получить информационный фрейм, в котором вы можете выбрать информацию.

Пример начала получения json, который вы получите.

{
"competitionslist": {
    "0": {
        "name": "Friendlies",
        "idCup": 506,
        "edition": 1872,
        "idCupSeason": 2000010101,
        "isFifaCompetition": true,
        "countryCode": "",
        "cupKindID": 105,
        "competitionSeoName": "friendly-506",
        "hasStanding": false,
        "linkMatches": "",
        "linkStanding": "",
        "link": "",
        "hasMatchLive": false,
        "isActiveSeason": true,
        "matchlist": [{
            "idCup": 506,
            "idCupSeason": 2000010101,
            "edition": 1872,
            "isLive": false,
            "isActiveSeason": true,
            "isFifaCompetition": true,
            "isClubCompetition": false,
            "competitionName": "Friendlies",
            "providerCompetitionID": 0,
            "providerEditionID": 0,
            "idMatch": 300438343,
            "internalMatchID": 0,
            "idRound": 281863,
            "idHomeTeam": 43818,
            "homeCountryCode": "IRQ",
            "homeTeamName": "Iraq",
            "idAwayTeam": 43989,
            "awayCountryCode": "PLE",
            "awayTeamName": "Palestine",
            "matchDate": "2018-05-08T16:00:00Z",
            "matchDateUTC": "2018-05-08T16:00:00Z",
            "kickOffTime": "16:00",
            "minute": 0,
            "status": 0,
            "cupKindID": 105,
            "cupKindName": "Friendly",
            "hasLineup": false,
            "scoreHome": 0,
            "scoreAway": 0,
            "venueName": "Basra ",
            "competitionSeoName": "friendly-506",
            "matchSeoName": "Iraq-Palestine-300438343",
            "homeTeamSeoName": "iraq-43818",
            "awayTeamSeoName": "palestine-43989",
            "hasStanding": false,
            "winTeamName": "",
            "winTeamShortName": "",
            "isStarted": true,
            "isFinished": true,
            "isAwarded": false,
            "isPostponed": false,
            "isSuspended": false,
            "isAbandoned": false,
            "link": "",
            "isNextDay": false
        }, {
            "idCup": 506,
            "idCupSeason": 2000010101,
            "edition": 1872,
            "isLive": false,
            "isActiveSeason": true,
            "isFifaCompetition": true,
            "isClubCompetition": false,
            "competitionName": "Friendlies",
            "providerCompetitionID": 0,
            "providerEditionID": 0,
            "idMatch": 300439349,
            "internalMatchID": 0,
            "idRound": 281863,
            "idHomeTeam": 43843,
            "homeCountryCode": "ALG",
            "homeTeamName": "Algeria",
            "idAwayTeam": 43835,
            "awayCountryCode": "KSA",
            "awayTeamName": "Saudi Arabia",
            "matchDate": "2018-05-09T19:30:00Z",
            "minute": 0,
            "status": 0,
            "cupKindID": 105,
            "cupKindName": "Friendly",
            "hasLineup": false,
            "scoreHome": 0,
            "scoreAway": 2,
            "venueName": "Cadiz ",
            "idWinTeam": 43835,
            "competitionSeoName": "friendly-506",
            "matchSeoName": "Algeria-Saudi Arabia-300439349",
            "homeTeamSeoName": "algeria-43843",
            "awayTeamSeoName": "saudi-arabia-43835",
            "hasStanding": false,
            "winTeamName": "Saudi Arabia",
            "winTeamShortName": "Saudi Arabia",
            "isStarted": true,
            "isFinished": true,
            "isAwarded": false,
            "isPostponed": false,
            "isSuspended": false,
            "isAbandoned": false,
            "link": "",
            "isNextDay": false
        },
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...