Я очень новичок в парсинге и пытаюсь получить данные из раздела этого сайта — https://projects.fivethirtyeight.com/soccer-predictions/premier-league/. Данные, которые я пытаюсь получить, находятся на второй вкладке «Матчи» и в разделе «Предстоящие матчи».
Я попытался сделать это с помощью SelectorGadget и rvest следующим образом:
library(rvest)
url <- ("https://projects.fivethirtyeight.com/soccer-predictions/premier-league/")
url %>%
html_nodes(".prob, .name") %>%
html_text()
это возвращает значения, однако соответствующие первой вкладке на странице «Положение». Как я могу сослаться на правильный раздел, который я пытаюсь вытащить?
он загружает некоторые значения из Projects.fivethirtyeight.com/soccer-predictions/forecasts/…
Во-первых: я не знаю R, но Python.
Когда вы нажимаете Matches
, страница использует JavaScript для генерации совпадений и загружает данные JSON из:
https://projects.fivethirtyeight.com/soccer-predictions/forecasts/2021_premier-league_forecast.json
https://projects.fivethirtyeight.com/soccer-predictions/forecasts/2021_premier-league_matches.json
https://projects.fivethirtyeight.com/soccer-predictions/forecasts/2021_premier-league_clinches.json
Я проверил только один из них — 2021_premier-league_matches.json
— и вижу, что у него есть данные для Completed Matches
Я сделал пример на Python:
import requests
url = 'https://projects.fivethirtyeight.com/soccer-predictions/forecasts/2021_premier-league_matches.json'
response = requests.get(url)
data = response.json()
for item in data:
# search date
if item['datetime'].startswith('2022-03-16'):
print('team1:', item['team1_code'], '|', item['team1'])
print('prob1:', item['prob1'])
print('score1:', item['score1'])
print('adj_score1:', item['adj_score1'])
print('chances1:', item['chances1'])
print('moves1:', item['moves1'])
print('---')
print('team2:', item['team2_code'], '|', item['team2'])
print('prob2:', item['prob2'])
print('score2:', item['score2'])
print('adj_score2:', item['adj_score2'])
print('chances2:', item['chances2'])
print('moves2:', item['moves2'])
print('----------------------------------------')
Результат:
team1: BHA | Brighton and Hove Albion
prob1: 0.30435
score1: 0
adj_score1: 0.0
chances1: 1.244
moves1: 1.682
---
team2: TOT | Tottenham Hotspur
prob2: 0.43627
score2: 2
adj_score2: 2.1
chances2: 1.924
moves2: 1.056
----------------------------------------
team1: ARS | Arsenal
prob1: 0.22114
score1: 0
adj_score1: 0.0
chances1: 0.569
moves1: 0.514
---
team2: LIV | Liverpool
prob2: 0.55306
score2: 2
adj_score2: 2.1
chances2: 1.243
moves2: 0.813
----------------------------------------
эта страница использует JavaScript для загрузки данных, когда вы нажимаете
Matches
и, вероятно,rvest
не может работатьJavaScript
. Вам может понадобитьсяRselenium
для управления реальным веб-браузером, который может запускать JavaScript. ИЛИ вы можете использоватьDevTools
вFirefox
/Chrome
, чтобы получить URL-адрес, который JavaScript использует для загрузки данных - обычно это данные JSON.