web-dev-qa-db-ja.com

Beautiful SoupのFind()関数を理解する

私がやろうとしていることが簡単であることはわかっていますが、それは私に悲しみを引き起こしています。 BeautifulSoupを使用してHTMLからデータをプルしたいのですが。そのためには、.find()関数を適切に使用する必要があります。これが私が作業しているHTMLです:

<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>

必要な値は、73599からのdata-value=7359932352からのdata-value=32452、および69%からのpercentage goodです。

過去のコードとオンラインの例を使用して、これは私がこれまで持ってきたものです:

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

これまでのところ両方とも効果はありません。 69%番号を取得するための検索の作成方法がわかりません。

8
OneManRiot

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

ここではdiv要素を検索していますが、spanにはサンプルHTMLデータに「実数」クラスが含まれています。代わりに試してください。

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

ここでは、data-value属性の存在も確認しています。


「実数」または「偽数」のクラスを持つ要素を見つけるには、 CSSセレクター を作成します。

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

69%値を取得するには:

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

または、CSSセレクター:

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

または、h6テキストを持つAudit score要素を探し、次に 前の兄弟 を取得します。

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