美丽的汤:获取没有特定类的特定文本

时间:2017-03-20 15:41:51

标签: python beautifulsoup

我正在努力获得突出显示的文字" frei ab 01.05.2017"下面。然而问题是,班级" section_content iw_right"在该网站上存在19次。我会做一个find_all并且只从那里返回第11个元素,但是在某些我要抓的网站上有不同数量的那个类,所以我可能不会总是抓住正确的。有任何想法吗?谢谢!

enter image description here

2 个答案:

答案 0 :(得分:1)

获取所需元素的一种方法是使用前面的标签 - 使用“Erdgeschoss”文本和find the next strong sibling找到span元素:

label = soup.find("span", text="Erdgeschoss")
print(label.find_next_sibling("strong").get_text())

答案 1 :(得分:1)

您可以使用 lxml ,这比 BeautifulSoup 快一个数量级。

以下代码可以帮助您实现所需的结果。

from lxml import html
html_string = """
    <div class="clear">
        <div class="section_content iw_right">
            <p>
            <span>
            </span>
            <strong>hello</strong>
            <br>
            <strong>gen</strong>
            </p>
        </div>
    </div>

    <div class="clear">
        <p>
        <span>
        </span>
        <strong>hello1</strong>
        <br>
        <strong>gen1</strong>
        </p>
    </div>
"""
root = html.fromstring(html_string)
r_xp = [elem.xpath('.//p/strong/text()')[0] for elem in root.xpath('//div[@class="clear"]')]
print(r_xp)

请注意示例"section_content iw_right"中第二个div的等级为html_string的div的缺失。

以上代码将导致:

['hello', 'hello1']