首页 > 解决方案 > BeautifulSoup 如何使用 for 循环并提取特定数据?

问题描述

下面的 HTML 代码来自一个关于电影评论的网站。我想从下面的代码中提取星星,即John C. Reilly,Sarah SilvermanGal Gadot. 我怎么能这样做?

代码:

html_doc = """
<html>
    <head>
    </head>
    <body>
    <div class="credit_summary_item">
                <h4 class="inline">Stars:</h4>
            <a href="/name/nm0000604/?ref_=tt_ov_st_sm">John C. Reilly</a>,
            <a href="/name/nm0798971/?ref_=tt_ov_st_sm">Sarah Silverman</a>,
            <a href="/name/nm2933757/?ref_=tt_ov_st_sm">Gal Gadot</a>
            <span class="ghost">|</span>
            <a href="fullcredits/?ref_=tt_ov_st_sm">See full cast & crew</a>&nbsp;&raquo;
        </div>
    </body>
</html>
"""

from bs4 import BeautifulSoup
soup = BeautifulSoup(html_doc, 'html.parser')

我的点子

我打算使用 for 循环遍历每个循环,div class直到找到带有 text 的类Stars,然后我可以在其中提取名称。但我不知道如何编码,因为我不太熟悉 HTML 语法和模块。

标签: pythonbeautifulsoup

解决方案


我将展示如何实现这一点,并且你只需要学习 BeautifulSoap 语法。

首先,我们想将该方法findAll用于具有“class”属性的“div”标签。

divs = soup.findAll("div", attrs={"class": "credit_summary_item"})

然后,我们将过滤所有没有星号的 div:

stars = [div for div in divs if "Stars:" in div.h4.text]

如果你只有一个地方有 start 你可以把它拿出来:

star = start[0]

然后再次找到标签“a”中的所有文本

names = [a.text for a in star.findAll("a")]

你可以看到我没有使用任何 html/css 语法,只使用了 soup。我希望它有所帮助。


推荐阅读