web-dev-qa-db-fra.com

Comprendre la fonction Find () dans Beautiful Soup

Je sais que ce que j'essaie de faire est simple mais cela me cause du chagrin. Je voudrais extraire des données de HTML en utilisant BeautifulSoup. Pour ce faire, j'ai besoin d'utiliser correctement la fonction .find(). Voici le code HTML avec lequel je travaille:

<div class="audit">

    <div class="profile-info">
        <img class="profile-pic" src="https://pbs.twimg.com/profile_images/471758097036226560/tLLeiOiL_normal.jpeg" />
        <h4>Ed Boon</h4>
        <span class="screen-name"><a href="http://www.Twitter.com/noobde" target="_blank">@noobde</a></span>
    </div>

        <div class="followers">
            <div class="pie"></div>
            <div class="pie-data">
                <span class="real number" data-value=73599>73,599</span><span class="real"> Real</span><br />
                <span class="fake number" data-value=32452>32,452</span><span class="fake"> Fake</span><br />
                <h6>Followers</h6>
            </div>
        </div>
        <div class="score">
            <img src="//twitteraudit-prod.s3.amazonaws.com/dist/f977287de6281fe3e1ef36d48d996fb83dd6a876/img/audit-result-good.png" />
            <div class="percentage good">
                69%
            </div>
            <h6>Audit score</h6>

Les valeurs que je veux sont 73599 de data-value=73599, 32352 de data-value=32452, et le 69% de percentage good.

En utilisant du code passé et des exemples en ligne, voici ce que j'ai jusqu'à présent:

RealValue = soup.find("div", {"class":"real number"})['data-value']
FakeValue = soup.find("audit", {"class":"fake number"})['data-value']

Les deux jusqu'à présent sans effet. Je ne sais pas comment créer la découverte afin de tirer le 69% nombre.

8
OneManRiot

soup.find("div", {"class":"real number"})['data-value']

Ici, vous recherchez un élément div, mais le span a la classe "nombre réel" dans vos exemples de données HTML, essayez plutôt:

soup.find("span", {"class": "real number", "data-value": True})['data-value']

Ici, nous vérifions également la présence de data-value attribut.


Pour trouver des éléments ayant des classes "nombre réel" ou "nombre faux", vous pouvez faire un sélecteur CSS :

for Elm in soup.select(".real.number,.fake.number"):
    print(Elm.get("data-value"))

Pour obtenir le 69% valeur:

soup.find("div", {"class": "percentage good"}).get_text(strip=True)

Ou, un sélecteur CSS:

soup.select_one(".percentage.good").get_text(strip=True)
soup.select_one(".score .percentage").get_text(strip=True)

Ou, localisant le h6 élément ayant Audit score texte et ensuite obtenir le frère précédent :

soup.find("h6", text="Audit score").previous_sibling.get_text(strip=True)
12
alecxe