écriture csv / json

python

Le problème exposé dans ce sujet a été résolu.

Bonjour a tous Je récupère les données dans la variable "players" et j’aimerai l’écrire dans un csv ou json Le problème est qu’il m’inscrit seulement la dernière ligne avec la methode 'w' Avec la méthode 'a’, il m’inscrit bien toutes les lignes mais n’efface pas les précédentes et ce n’est pas ce que je veux Voici mon code :



 
import requests
from bs4 import BeautifulSoup
import csv
import pandas as pd
import json
import re
 
 
for i in range(5):
    url = 'https://www.futbin.com/21/players?page='+ str(i) +'&ps_price=1100-5000&version=gold_rare&sort=likes&order=desc'
    response = requests.get(url)
    if response.ok:
        soup = BeautifulSoup(response.text,'lxml')
        tbody = soup.find('tbody')
        extracted = tbody.findAll('tr', {'class': re.compile('player_tr_\d+')})
        for td in extracted :
            name = td.find('a', class_='player_name_players_table')
            #print(name.text)
            detail = td.find('span', class_= 'players_club_nation')
            if detail:
                club = detail.find('img')
            clubLink = club['src']
            #print(clubLink)
            pays = club.find_next('img')
            paysLink = pays['src']
            #print(paysLink)
            league = pays.find_next('img')
            leagueLink = league['src']
            #print(leagueLink)
            imgPlayer = td.find('img', class_='player_img')
            if imgPlayer:
                imgPlayerLink = imgPlayer['data-original']
            #print(imgPlayerLink)
            note = name.find_next('td')
            #print(note.text)
            position = note.find_next('td')
            #print(position.text)
            version = position.find_next('td')
            #print(version.text)
            prix = version.find_next('td')
            #print(prix.text)
 
 
# data to be written row-wise in csv fil
players = [
    name.text,
    clubLink, 
    paysLink,
    leagueLink,
    imgPlayerLink,
    note.text,
    position.text,
    version.text,
    prix.text ]
#print(players)
 
with open('data.json', 'w') as outfile:
    json.dump(players, outfile)

Je dois pas être loin de la solution mais je ne trouve pas

Si quelqu’un voit l’erreur

Merci d’avance

+0 -0

Bonjour

La boucle for i in range(5): va stocker les valeurs dans les même variable à chaque iterations, donc ta variable players ne contient que les valeurs de la dernière iteration, et quand tu la sauvegarde dans data.json tu n’as que la dernière valeur qui est écrite.

Tu dois créer une liste de tous les players pour que ca fonctionne et avoir quelque chose comme ca:

players = []
for i in range(5):
    url = 'https://www.futbin.com/21/players?page='+ str(i) +'&ps_price=1100-5000&version=gold_rare&sort=likes&order=desc'
    response = requests.get(url)
    if response.ok:
      .
      .
      .
      players.append([name.text, clubLink, paysLink, leagueLink, imgPlayerLink, note.text, position.text, version.text, prix.text ]

with open('data.json', 'w') as outfile:
    json.dump(players, outfile)

PS : Sachant que je vais utiliser ce fichier avec php, mieux vaut creer un json ou un csv? Je vais l’afficher dans un tableau html

fut4fun

Bonjour, l’avantage du JSON c’est que quasiment tous les langages ont une fonction standard pour encoder/décoder.

/* Javascript */
JSON.stringify(my_object); // Encoder
JSON.parse(json_data); // Décoder
/* PHP */
json_encode($my_object); // Encoder
json_decode($json_data); // Décoder
# Python
import json
json.dumps(my_object) # Encoder
json.loads(json_data) # Décoder

Alors que le CSV suivant sa nomenclature (type de séparateur) ou son contenu (espacement non géré ou caractères spéciaux) peut poser problème au moment du traitement.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte