在python (BeautifulSoup)中获取特定的span标签文本



我在python3上使用BeautifulSoup从MyAnimeList上抓取一些信息,我试图获得有关节目"状态"的信息,但我无法访问它。

这里是html:

<h2>Information</h2>
<div>
<span class="dark_text">Type:</span>
<a href="https://myanimelist.net/topanime.php?type=movie">Movie</a>
</div>
<div class="spaceit">
<span class="dark_text">Episodes:</span>
1
</div>
<div>
<span class="dark_text">Status:</span>
Finished Airing
</div>

所有这些也包含在另一个div标签中,但我只包含了我想要抓取的html部分。为了澄清,我想获得包含在"状态"中的文本"完成播放"。

这是我到目前为止的代码,但我不确定这是否是最好的方法,或者从这里去哪里:

Page_soup = soup(Page_html, "html.parser")
extra_info = Page_soup.find('td', attrs={'class': 'borderClass'})
span_html = extra_info.select('span')
for i in range(len(span_html)):
if 'Status:' in span_html[i].getText():

任何帮助将不胜感激,谢谢!

要获取<span>"Status:"旁边的文本,您可以使用:

from bs4 import BeautifulSoup
html_doc = """
<h2>Information</h2>
<div>
<span class="dark_text">Type:</span>
<a href="https://myanimelist.net/topanime.php?type=movie">Movie</a>
</div>
<div class="spaceit">
<span class="dark_text">Episodes:</span>
1
</div>
<div>
<span class="dark_text">Status:</span>
Finished Airing
</div>
"""
soup = BeautifulSoup(html_doc, "html.parser")
txt = soup.select_one('span:-soup-contains("Status:")').find_next_sibling(text=True)
print(txt.strip())

打印:

Finished Airing

或:

txt = soup.find("span", text="Status:").find_next_sibling(text=True)
print(txt.strip())

另一个解决方案(可能):

f = soup.find_all('span',attrs={'class':'dark_text'})
for i in f:
if i.text == 'Status:':
print(i.parent.text)

并将'Status:'更改为您想要查找的任何其他内容。希望我帮到你!

最新更新