Python Beautiful Soup:仅在另一个内部标记目标标记

时间:2017-06-06 14:20:57

标签: python html web-scraping beautifulsoup

我一直在寻找这个问题的答案,但我运气不好。这是我将解释的HTML:

<div class="news-overflow-hidden">
    <h3>
        <i class="pholder"></i>
        <a href="/news/view/141524/" style="">ЕСПЧ присудил €15 000 экс-главе службы безопасности ЮКОСа</a> </h3>
    <p class="news-text">
        <a href="/news/view/141524/">В такую сумму Европейский суд по правам человека оценил несоблюдение в отношении мужчины презумпции невиновности и нарушение при исследовании свидетельских показаний в судах.</a> </p>
    <i class="news-type-icon"></i>
</div>

我想要做的是抓住<a>内的<p class="news-text">。问题是<p class="news-text">存在于其他地方,所以如果我抓住那个,我会抓住我不需要的东西。如何定位仅存在于此类段落中的<a>标记?我可以使用此类获取所有段落,然后为每个段落创建一个if语句,以查看内容是否包含<a>?想法?

1 个答案:

答案 0 :(得分:4)

您可以将多个条件应用于单个CSS selector中的多个元素:

soup.select("p.news-text a")

这会找到a元素的p元素的所有news-text个元素。

<强>演示:

In [11]: from bs4 import BeautifulSoup

In [12]: data = """<div class="news-overflow-hidden">
    ...:     <h3>
    ...:         <i class="pholder"></i>
    ...:         <a href="/news/view/141524/" style="">ЕСПЧ присудил €15 000 экс-главе службы безопас
    ...: ности ЮКОСа</a> </h3>
    ...:     <p class="news-text">
    ...:         <a href="/news/view/141524/">В такую сумму Европейский суд по правам человека оценил
    ...:  несоблюдение в отношении мужчины презумпции невиновности и нарушение при исследовании свиде
    ...: тельских показаний в судах.</a> </p>
    ...:     <i class="news-type-icon"></i>
    ...: </div>"""

In [13]: soup = BeautifulSoup(data, "html.parser")

In [14]: for a in soup.select("p.news-text a"):
    ...:     print(a.get_text(strip=True))
    ...:     
В такую сумму Европейский суд по правам человека оценил несоблюдение в отношении мужчины презумпции невиновности и нарушение при исследовании свидетельских показаний в судах.