Webscrapping avec Bs

Bonjour,

Je rencontre un souci pour récupérer les infos dont j’ai besoin (de possession à fouls conceded)

La balise qui contient mes infos est qui elle meme contient les balises filles
cependant en récupérant le code html je n’obtiens pas les balises contenues dans tbody
code :
stats= soup_1.findAll(‹ tbody ›)
sortie :

[<tbody class="standingEntriesContainer">
 </tbody>,
 <tbody class="seasonSoFarTabContainer"></tbody>,
 <tbody class="matchCentreStatsContainer"></tbody>]

code :
stats[2]
sortie :
<tbody class="matchCentreStatsContainer"></tbody>

Bonsoir Ulrich. Cela pourrait nous aider à t’aider si tu veux bien afficher ton code en entier (mets-le dans les balises codes lui aussi; pas que les sorties).

Bonjour Ulrich,
En effet, nous avons besoin d’avoir plus de contexte sur le code complet que tu as essayé ainsi que du résultat obtenu, pour que l’on puisse t’aider à solutionner le problème.

Bonne journée à toi :slight_smile:

Bonjour, voici mon code

#importation des bibliothèques

import requests
from urllib.request import urlopen
from bs4 import BeautifulSoup as bs
import pandas as pd 
import numpy as np
import csv

#recuperation du code html

headers={'User-Agent':
         'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.47 Safari/537.36'}
url_1='https://www.premierleague.com/match/59266'
page_1 = requests.get(url_1, headers = headers)
soup_1 = bs(page_1.content, 'html.parser')
m1 =  soup_1.findAll('table')
print(m1[2])

sortie:

<table>
<thead>
<tr>
<th> <a href="/clubs/1/Arsenal/overview">
<div class="badge badge-image-container" data-size="25" data-widget="club-badge-image">
<img class="badge-image badge-image--25 js-badge-image" src="https://resources.premierleague.com/premierleague/badges/25/t3.png" srcset="https://resources.premierleague.com/premierleague/badges/25/t3.png, https://resources.premierleague.com/premierleague/badges/25/t3@x2.png 2x">
</img></div>
            Arsenal
    </a>
</th>
<th> </th>
<th> <a href="/clubs/131/Brighton-and-Hove-Albion/overview">
<div class="badge badge-image-container" data-size="25" data-widget="club-badge-image">
<img class="badge-image badge-image--25 js-badge-image" src="https://resources.premierleague.com/premierleague/badges/25/t36.png" srcset="https://resources.premierleague.com/premierleague/badges/25/t36.png, https://resources.premierleague.com/premierleague/badges/25/t36@x2.png 2x">
</img></div>
            Brighton &amp; Hove Albion
    </a>
</th>
</tr>
</thead>
<tbody class="matchCentreStatsContainer"></tbody>
</table>
**#Nom des équipes** 
Equipe=d1.findAll('a')
home_team = Equipe[0].text
away_team = Equipe[1].text
display(home_team, away_team)

sortie

'\n\n\n\n            Arsenal\n    '
'\n\n\n\n            Brighton & Hove Albion\n

#stats des équipes

stats= soup_1.findAll('tbody')
stats

sortie

 [<tbody class="standingEntriesContainer">
 </tbody>,
 <tbody class="seasonSoFarTabContainer"></tbody>,
 <tbody class="matchCentreStatsContainer"></tbody>]   '

stats[2]
sortie
<tbody class="matchCentreStatsContainer"></tbody>

Hello Ulrich,

Le site est clairement dynamique, utilise Selenium

En effet, comme l’a dit Oussema, il me semble que ce site premierleague.com utilise du Javascript ce qui empêche BeautifulSoup de fonctionner convenablement.
Il existe d’autres sites similaires qui ne sont pas dynamiques, comme transfertmarkt.fr par exemple.
Sinon, il faudra utiliser Selenium.

Bonne journée à toi,
Yaniv

Oussema ou Yaniv, pourrais-tu expliquer en quoi le fait que le site est dynamique empêche BeautifulSoup de parser correctement le HTML de la page et de trouver les balises qu’on fournit à la méthode findAll ? (je n’y suis pas parvenu moi aussi).

Hello Isarël,

Le site étant dynamique, cela signifie que le code HTML de la page n’est pas statique, mais est généré à la volée par le navigateur (Chrome) lorsque la page est demandée.

Ainsi, Ce que BeautifulSoup arrive à récupérer n’est autre qu’une coquille vide (la coquille qui va être remplie par le résultat du code dynamique)

Selenium par contre peut interagir avec le site et obtenir le HTML complet car il simule un vrai navigateur