Problème d'itération beautifulSoup
bonjour à tous
J'espere pour commencer etre dans la bonne section :)
Je découvre les joies du langage Python afin de développer mon site Web
Après avoir vu de nombreux tutos ainsi que les différentes documentations concernant BeautifulSoup, j'arrive à récupérer les infos souhaitées sur la 1ere ligne du tableau seulement. J'ai bien compris que pour avoir toutes les lignes du tableau, il faut faire une itération avec "for". C'est la où je bloque.
La 1ere ligne est bien trouvée mais à la 2eme, la valeur est "none".
Voici mon code ci-dessous :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
|
import requests
from bs4 import BeautifulSoup
import pandas as pd
import urllib3
url = 'https://www.futbin.com/21/players'
response = requests.get(url)
if response.ok:
soup = BeautifulSoup(response.text,'lxml')
table = soup.find('tbody')
tds = soup.findAll('td')
for td in tds :
imgPlayer = td.find('img', class_='player_img')
imgPlayerLink = imgPlayer['data-original']
name = td.find('a', class_='player_name_players_table')
detail = td.find('span', class_= 'players_club_nation')
club = detail.find('img')
clubLink = club['src']
pays = club.find_next('img')
paysLink = pays['src']
league = pays.find_next('img')
leagueLink = league['src']
note = name.find_next('td')
position = note.find_next('td')
version = position.find_next('td')
prix = version.find_next('td')
print(imgPlayerLink)
print(name.text)
print(clubLink)
print(paysLink)
print(leagueLink)
print(note.text)
print(position.text)
print(version.text)
print(prix.text) |
J'espère sincèrement que vous pourrez m'aider.
En attendant une réponse, je vous remercie par avance
Problème d'itération beautifulSoup
Salut,
Tout d'abord, merci de ta réponse.
Comme j'ai écrit dans le sujet, je débute et j'ai regardé des tutos a droite et à gauche afin d'arriver a faire ce que j'aimerais.
Sachant qu'il me prend la 1ere ligne, je pensais que cela fonctionnerait avec une itération
Comment faire pour ignorer les cases?
Merci d'avance
Problème d'itération beautifulSoup
On est sur un forum d'entraide non?
Je demande juste quelle condition dois-je appliquer afin que le boucle continue
Problème d'itération beautifulSoup
Merci pour votre aide, j'ai réussi a récupéré les données que je voulais.
Maintenant 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 :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
|
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