如何找到同名的第二个 div class?

How do I find second div class with the same name?

我什至不知道如何正确地问这个问题。 我刚开始python,我正在尝试制作一个爬虫。 一切正常,但我无法在正文中“调用”或“找到”具有相同 class 名称的第二个 div。 我一直在互联网上寻找帮助,但人们编写代码的方式与我所写的不一样。 所以 HTML 看起来像这样:

<div class="card">
    <div class="card-body">...</div>
    <div class="card-body">...</div>

我的代码:

comp_link = comp_card.find('a', class_ = 'link')
href_link = comp_link['href']
link_final = 'https://www.someweb.com' + href_link
prof_text = requests.get(link_final).text
prof_soup = BeautifulSoup(prof_text, 'lxml')
comp_name = prof_soup.find('h2', class_ = 'company-name').text.strip()
comp_info = prof_soup.find('div', class_ ='col-md-12 col-lg-4')

但是当我尝试使用

comp_info = comp_info.find('div', class_ = 'card-body'[1])

没用。 我尝试过实验,使用 Whosebug 中其他人的解决方案(但我太笨了)。

通常,我更喜欢使用 CSS select 或者。在这个简单的例子中,您可以 select 具有 class 名称 card-body 的第二个 child。你可以使用 nth-child select 或者抢第二个 div:

import bs4

html = """
<div class="card">
    <div class="card-body">Not this</div>
    <div class="card-body">But this</div>
</div>
"""
soup = bs4.BeautifulSoup(html)
print(soup.select('div.card-body:nth-child(2)'))

输出

[<div class="card-body">But this</div>]

如果您碰巧遇到目标元素实际上不是第二个元素,而只是带有 class card-body 的第二个元素的情况,那么使用 nth-child(n of selector)。这将 select 匹配指定 select 或:

的第二个元素
html = """
<div class="card">
    <div class="other-class">Not this</div>
    <div class="card-body">Or this</div>
    <div class="card-body">But this</div>
</div>
"""
soup = bs4.BeautifulSoup(html)
print(soup.select('div:nth-child(2 of .card-body)'))

输出

[<div class="card-body">But this</div>]

BeautifulSoup 的 CSS select 或逻辑由 SoupSieve 库驱动,更多信息可在此处找到:https://facelessuser.github.io/soupsieve/selectors/pseudo-classes/#:nth-child.