-2
votes

Racler les données Web de JSON avec Python

Je voudrais gratter des données d'horaire de cette API . Les données renvoyées sont au format JSON. J'utilise Python.

J'ai essayé le code suivant: xxx

mais obtenir une erreur xxx

Qu'est-ce que je fais mal?


2 commentaires

Tout comme une note, vous ne "grattez" rien, c'est comment une API JSON est censée être utilisée.


Pourquoi indexez-vous la chaîne JSON? SNAV_TIMETABLE [LEN (SNAV_TIMETABLE) -2] n'est pas un document JSON valide, c'est un seul caractère du document. Je viens de décoder la chaîne entière .


3 Réponses :


3
votes

Vous avez mal orthographié Strdataarri pour un.

En outre, la bibliothèque de demandes pourrait rendre cela beaucoup plus propre à la recherche. p> xxx pré>

sortie: p>

[{'COMPANY': 'Snav',
  'CODICE CORSA': 'NABECASA',
  'DEPARTURE DATE TIME': '2019-02-25 08:25',
  'ARRIVAL DATE TIME': '2019-02-25 09:20'},
 {'COMPANY': 'Snav',
  'CODICE CORSA': 'NABECASA',
  'DEPARTURE DATE TIME': '2019-02-25 12:30',
  'ARRIVAL DATE TIME': '2019-02-25 13:25'},
 {'COMPANY': 'Snav',
  'CODICE CORSA': 'NABECASA',
  'DEPARTURE DATE TIME': '2019-02-25 16:20',
  'ARRIVAL DATE TIME': '2019-02-25 17:15'},
 {'COMPANY': 'Snav',
  'CODICE CORSA': 'NABECASA',
  'DEPARTURE DATE TIME': '2019-02-25 19:00',
  'ARRIVAL DATE TIME': '2019-02-25 19:55'},
 {'COMPANY': 'Snav',
  'CODICE CORSA': 'NABECASA',
  'DEPARTURE DATE TIME': '2019-02-26 08:25',
  'ARRIVAL DATE TIME': '2019-02-26 09:20'},
 {'COMPANY': 'Snav',
  'CODICE CORSA': 'NABECASA',
  'DEPARTURE DATE TIME': '2019-02-26 12:30',
  'ARRIVAL DATE TIME': '2019-02-26 13:25'},
 {'COMPANY': 'Snav',
  'CODICE CORSA': 'NABECASA',
  'DEPARTURE DATE TIME': '2019-02-26 16:20',
  'ARRIVAL DATE TIME': '2019-02-26 17:15'},
 {'COMPANY': 'Snav',
  'CODICE CORSA': 'NABECASA',
  'DEPARTURE DATE TIME': '2019-02-26 19:00',
  'ARRIVAL DATE TIME': '2019-02-26 19:55'},
 {'COMPANY': 'Snav',
  'CODICE CORSA': 'NABECASA',
  'DEPARTURE DATE TIME': '2019-02-27 08:25',
  'ARRIVAL DATE TIME': '2019-02-27 09:20'},
 {'COMPANY': 'Snav',
  'CODICE CORSA': 'NABECASA',
  'DEPARTURE DATE TIME': '2019-02-27 12:30',
  'ARRIVAL DATE TIME': '2019-02-27 13:25'},
 {'COMPANY': 'Snav',
  'CODICE CORSA': 'NABECASA',
  'DEPARTURE DATE TIME': '2019-02-27 16:20',
  'ARRIVAL DATE TIME': '2019-02-27 17:15'},
 {'COMPANY': 'Snav',
  'CODICE CORSA': 'NABECASA',
  'DEPARTURE DATE TIME': '2019-02-27 19:00',
  'ARRIVAL DATE TIME': '2019-02-27 19:55'}]


0 commentaires

1
votes

Il est préférable d'utiliser la bibliothèque CODE> Demandes CODE> Si vous utilisez Python 3.x. Voici comment vous pouvez obtenir une réponse JSON.

for departure in json_data ['data']['ratesOutward']:
   snav_timetable_data_cleaned.append({
      'COMPANY': 'Snav',
      'CODICE CORSA': departure['coditinera'],
      'DEPARTURE DATE TIME': departure['strDatapart'],
      'ARRIVAL DATE TIME': departure['strDataarri']
   })


4 commentaires

Les demandes disposent d'un analyseur JSON intégré et votre code conduira toujours à une erreur.


J'ai couru mon code avant de poster et cela fonctionne sans erreur. Pouvez-vous me dire quelle erreur vous avez?


Demandes est la meilleure bibliothèque si vous utilisez Python 2.x aussi. Non pas que vous deviez utiliser Python 2.x pour de nouveaux projets plus longtemps.


Je pensais que vous aviez manqué l'orthographe dataarri à partir du commentaire original.



1
votes

Votre erreur tente de décoder un seul caractère à partir de la réponse:

import requests

snav_timetable_data = requests.get(snav_timetable_url).json()

snav_timetable_data_cleaned = []
for departure in snav_timetable_data['data']['ratesOutward']:
    snav_timetable_data_cleaned.append({
       'COMPANY': 'Snav',
       'CODICE CORSA': departure['coditinera'],
       'DEPARTURE DATE TIME': departure['strDatapart'],
       'ARRIVAL DATE TIME': departure['strDataarri']
    })


0 commentaires