【问题标题】:Beautiful Soup: Remove Tags that only contain hrefBeautiful Soup: 删除只包含href的标签
【发布时间】:2014-05-13 14:39:42
【问题描述】:

我从 BeautifulSoup 得到一个特定标签的列表,其中一些标签只包含链接,没有进一步的文本。当我在这些上使用get_text() 方法时,我得到了链接的描述。

但是当标签only包含<a href>元素时,我想忽略它。

Tag: <p class="abc">text1 <a href=...>desc</a> text2</p> -> result: text1 desc text2 (OKAY)

Tag: <p class="abc"><a href=...>desc</a></p> -> result: desc (NOT OKAY)

当标签只包含一个链接时,我想将它们过滤掉。我该怎么做?

【问题讨论】:

  • 如果你能提供一些示例输入,你会得到更多有用的答案。

标签: python python-2.7 html-parsing beautifulsoup


【解决方案1】:

这个想法是遍历p标签并检查是否只有一个包含a标签的孩子:

from bs4 import BeautifulSoup


data = """
<div>
    <p class="abc">text1 <a href='http://mysite1.com'>desc1</a> text2</p>
    <p class="abc"><a href='http://mysite2.com'>desc2</a></p>
    <p class="abc"><a href='http://mysite3.com'>desc3</a>text3</p>
    <p class="abc">text4<a href='http://mysite4.com'>des4</a></p>
    <p class="abc">text5</p>
</div>
"""
soup = BeautifulSoup(data)
for p in soup('p', class_='abc'):
    if len(p.contents) == 1 and p.contents[0].name == 'a':
        print p

打印:

<p class="abc"><a href="http://mysite2.com">desc2</a></p>

仅供参考,.contents 包含标签的子标签列表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-16
    • 1970-01-01
    • 2018-01-17
    • 2021-08-13
    • 1970-01-01
    • 2019-05-30
    • 2014-06-11
    • 2011-08-20
    相关资源
    最近更新 更多