2
votes

Python ne lit pas JSON valide

Je récupère une source HTML d'une page Web pour extraire des données stockées au format json

Voici le code:

json.decoder.JSONDecodError: Expecting ',' delimiter: line 1 column 7506 (char7505)

L'exécution de ce qui précède génère cette erreur :

url = 'https://finance.yahoo.com/quote/SPY'
result = requests.get(url)

c = result.content
html = BeautifulSoup(c, 'html.parser')
scripts = html.find_all('script')

sl =[]
for s in scripts:

     sl.append(s)

s = (sl[-3])
s = s.contents
s = str(s)
s = s[119:-16]

json_data = json.loads(s)

Quand je prends le contenu de la variable s et le passe à un formateur json, il est reconnu comme json approprié.

J'ai utilisé le site Web suivant pour vérifier le json: http://jsonprettyprint.com/json-pretty-printer.php p >

Pourquoi cette erreur survient lors de l'utilisation de json.loads () en Python? Je suppose que cela a quelque chose à voir avec la chaîne qui n'est pas encodée correctement ou la présence de caractères d'échappement?

Comment résoudre ce problème?


2 commentaires

pourriez-vous imprimer votre JSON avant json.loads. Vous devez manquer une sorte de délimiteur là-dedans


L'objet json est trop gros pour que je puisse le publier ici sous forme de texte


4 Réponses :


1
votes

Votre JSON contient certains jetons inattendus tels que true . Utilisez d'abord json.dumps pour le résoudre.

print (json.dumps(s,indent =2))
s = json.dumps(s)
json_data = json.loads(s)


0 commentaires

-1
votes
import requests
from bs4 import BeautifulSoup
import json

url = 'https://finance.yahoo.com/quote/SPY'
result = requests.get(url)

c = result.content
html = BeautifulSoup(c, 'html.parser')
scripts = html.find_all('script')

sl =[]
for s in scripts:

     sl.append(s)

s = (sl[-3])
s = s.contents

a = s[0][111:-12]

jjjj = json.loads(a)
there's somethingrong when you deal with the list,you just use str()

2 commentaires

Pourquoi? c'est juste où vous vous trompez? pourquoi me donner une telle évaluation?


pouvez-vous résoudre ce problème par la méthode fournie par le second? hehe



-1
votes

S'il s'agissait d'un texte au format JSON valide, l'analyseur ne se plaindrait pas. Voici comment je l'ai testé

//first I scraped that page
curl https://finance.yahoo.com/quote/SPY > SPY.json
//then tried to parse it using json
a = open("SPY.json")
b = json.load(a)
ValueError: No JSON object could be decoded

Vous devez probablement d'abord l'analyser en un xml valide.


0 commentaires

1
votes
print(s[7400:7500])
mailboxes.isPrimary=\\"true\\" AND ymreq

0 commentaires