Я не могу получить информацию о данных занижения в JSON - PullRequest
1 голос
/ 10 июля 2019

Я пытаюсь получить информацию от https://understat.com/league/EPL.

Я пытался прочитать и увидеть, что сделали другие люди, но я просто не могу собрать последний кусочек головоломки вместе.мне удалось декодировать, но я не могу получить его в форме jsonObject.Кто-то с идентификатором

import requests
import json
import pandas as pd
import time
import lxml.html as lh
import codecs
from bs4 import BeautifulSoup

import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

url = "https://understat.com/league/EPL"
page = requests.get(url)
soup = BeautifulSoup(page.content,'html.parser')

scripts = soup.find_all('script')

for script in scripts:
    if 'var' in script.text:



        encoded_string = script.text
        encoded_string  = encoded_string .split("JSON.parse('", 1)
        encoded_string = encoded_string.rsplit("'),",1)[0]


        jsonStr = codecs.getdecoder('unicode-escape')(encoded_string)[0]
        jsonObj = json.loads(jsonStr)
        print(jsonObj)

поднять JSONDecodeError («Ожидаемое значение», s, err.value) из None json.decoder.JSONDecodeError: Ожидаемое значение: строка 2, столбец 4 (символ 4)

вот некоторые данные jsonString данные:

{"id":"9197","isResult":true,"h":{"id":"89","title":"Manchester United","short_title":"MUN"},"a":{"id":"75","title":"Leicester","short_title":"LEI"},"goals":{"h":"2","a":"1"},"xG":{"h":"1.5137","a":"1.73813"},"datetime":"2018-08-10 22:00:00","forecast":{"w":"0.2812","d":"0.3275","l":"0.3913"}},{"id":"9198","isResult":true,"h":{"id":"86","title":"Newcastle United","short_title":"NEW"},"a":{"id":"82","title":"Tottenham","short_title":"TOT"},"goals":{"h":"1","a":"2"},"xG":{"h":"0.974497","a":"2.58097"},"datetime":"2018-08-11 14:30:00","forecast":{"w":"0.08","d":"0.1479","l":"0.7721"}},{"id":"9199","isResult":true,"h":{"id":"90","title":"Watford","short_title":"WAT"},"a":{"id":"220","title":"Brighton","short_title":"BRI"},"goals":{"h":"2","a":"0"},"xG":{"h":"1.42372","a":"0.45504"},"datetime":"2018-08-11 17:00:00","forecast":{"w":"0.6438","d":"0.2574","l":"0.0988"}},

1 Ответ

0 голосов
/ 10 июля 2019

Попробуйте использовать следующие различные регулярные выражения и подстроку

import requests
import re
import json
import codecs

r = requests.get('https://understat.com/league/EPL')
p = re.compile(r'JSON.parse\((.*)\);')
d = p.findall(r.text)[0]
json_str = codecs.getdecoder('unicode-escape')(d)[0]
data = json.loads(json_str[1:-1])

Образец вывода на печать (данные)

enter image description here

...