首页 > 解决方案 > 在 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():

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

标签: htmlpython-3.xweb-scrapingbeautifulsoup

解决方案


<span>要获取with旁边的文本"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())

推荐阅读