Ich verwende den folgenden Code, um eine XHR-Anfrage an eine Website zu senden und die verschachtelte Liste zurückzugeben, in der die gewünschten Daten enthalten sind:
import requests
url = "http://www.whoscored.com/stagestatfeed/9155/stageteams/"
url = str("".join(url[0:3]))
params = {
"against": "0",
"field": "0",
"teamId": "-1",
"type": "8"
}
headers = {"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36",
"X-Requested-With": "XMLHttpRequest",
"Host": "www.whoscored.com",
"Referer": "http://www.whoscored.com/"}
responser = requests.get(url, params=params, headers=headers)
responser = responser.json()
print responser
Ich erhalte jedoch die folgende Fehlermeldung:
simplejson.scanner.JSONDecodeError: Expecting value: line 1 column 7 (char 6)
Der zurückgegebene Artikel scheint JSON zu sein, daher bin ich nicht sicher, warum ich diesen Fehler erhalte.
Kann jemand helfen?
Vielen Dank
Antworten:
2 für die Antwort № 1Benutzen JSONLint Um zu bestätigen, dass es wirklich JSON ist, da es "s" istwahrscheinlich nicht. JSONlint sagt Ihnen, wo genau der Fehler liegt. Ich habe diese "Analyse" unterhalb der Linie angewendet (lesen Sie nicht weiter, wenn Sie von hier an die Lösung selbst finden möchten):
Die zurückgegebene JSON ist ungültig, da für Strings einfache Anführungszeichen verwendet werden. JSON erlaubt nur doppelte Anführungszeichen:
Alle ersetzen "
mit "
funktioniert:
import requests
import json
url = "http://www.whoscored.com/stagestatfeed/9155/stageteams/"
#url = str("".join(url[0:3]))
params = {
"against": "0",
"field": "0",
"teamId": "-1",
"type": "8"
}
headers = {"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36",
"X-Requested-With": "XMLHttpRequest",
"Host": "www.whoscored.com",
"Referer": "http://www.whoscored.com/"}
responser = requests.get(url, params=params, headers=headers)
print json.loads(responser.text.replace(""", """))