如何找到同名的第二个 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.
我什至不知道如何正确地问这个问题。 我刚开始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.