1
votes

BeautifulSoup4 - Obtenir une sortie de texte incorrecte avec `getText ()`

J'essaie d'extraire du texte d'un site Web appelé Elite Prospects ( https: // www.eliteprospects.com/team/41/jokerit ). Voici le code source de la page:

KHL
JokeritKHL

J'essaie spécifiquement d'extraire le nom de l'équipe (dans cet exemple, c'est "Jokerit"), et le nom de la ligue situé dans le a href étiqueter. Je réussis à tirer le nom de la ligue, mais la façon dont j'essaie de tirer le nom de l'équipe me donne "JokeritKHL". J'utilise ce code pour plusieurs exemples, il doit donc également pouvoir extraire un nom d'équipe en deux mots (par exemple "Guelph Storm").

Voici mon code:

XXX

Et voici le résultat actuel que j'obtiens:

team_logo= scraper.find(class_='semi-logo')
team_name = team_logo.getText(strip=True)
league = team_logo.find('a')
league = league.getText()
print(league)
print(team_name)

Des idées?

Ce que j'essaie de découvrir, c'est qu'il existe un moyen de ne récupérer que la partie "Jokerit"


1 commentaires

3 Réponses :


0
votes

team_name = team_logo.getText (strip = True) . Cela renvoie tout le texte sous la hiérarchie de classe semi-logo . Par conséquent, vous obtenez Jokerit + KHL .


1 commentaires

Salut @ Dave123 Merci pour la nouvelle réponse. Je comprends que "team_name = team_logo.getText (strip = True). Cela renvoie tout le texte sous la hiérarchie de semi-logo de classe. Par conséquent, vous obtenez Jokerit + KHL." Ce que j'essaie de découvrir, c'est qu'il existe un moyen d'obtenir uniquement la partie "Jokerit"



1
votes

Vous pouvez utiliser .find () pour cela, comme suit:

from bs4 import BeautifulSoup

my_html = """
<div class="semi-logo">
    Jokerit
            <small>
            <span>
                <i> <img class="nation-flag" src="//files.eliteprospects.com/layout/flagsmedium/9.png"> </i>
                <a href="https://www.eliteprospects.com/league/khl">KHL</a>
            </span>
        </small>
    </div>  
"""

soup = BeautifulSoup(my_html, 'lxml')

extracted_text = soup.div.find(text=True)
print(extracted_text.strip())

Si vous regardez soup.div.children , vous verrez qu'il y a trois éléments descendants directs dans la balise: le texte avant la balise, la balise (et son contenu), et enfin un peu plus de texte puisque dans ce cas il y a un \ n code > à la fin. Il ne s'agit donc que de renvoyer les éléments qui sont du texte. Le .strip supprime l'espace blanc supplémentaire.


0 commentaires

0
votes

Ils peuvent également être facilement saisis par l'expression régulière de la chaîne

import requests, re

urls = ['https://www.eliteprospects.com/team/552/guelph-storm','https://www.eliteprospects.com/team/41/jokerit']
p = re.compile(r"sv2: '(.*)'")
with requests.Session() as s:
    for url in urls:
        r = s.get(url)
        print(p.findall(r.text)[0])


0 commentaires