了解Beautiful Soup中的Find()函数

35

我知道我尝试做的很简单,但是它让我感到烦恼。我想使用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>

我想要的数值是来自于data-value=7359973599,来自于data-value=3245232352,以及来自于percentage good69%

使用之前的代码和在线示例,目前已经完成如下:

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

迄今为止两者都没有效果。我不确定如何构建查找以获取69%数字。

1个回答

45

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

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

在这里,我们还要检查是否存在data-value属性。


要查找具有“real number”或“fake number”类的元素,您可以使用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)

或者,先定位包含文本 Audit scoreh6 元素,然后获取其前一个兄弟节点 preceding sibling:

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

1
只是为了那些犯了和我一样错误的人,传递给soup.find()的参数需要用双引号括起来。 - TYMG

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接