BeautifulSoup4无法通过搜索文本找到“a”标签

时间:2018-05-02 11:44:01

标签: python beautifulsoup

示例HTML

<a class="accordion-item__link" href="/identity-checking/individual"><!-- react-text: 178 -->Australia<!-- /react-text --></a>

当我跑步时

soup.find("a", text="Australia")

它什么都不返回。

如果我跑 soup.find("a", href="/identity-checking/individual")它找到了标签 soup.find("a", href="/identity-checking/individual").text也会返回“澳大利亚”

是否与评论有关?

3 个答案:

答案 0 :(得分:1)

我试图找到一种坚持find方法的方法,因为它是最方便的方法。适应性强。这里的问题是HTML评论弄乱了引擎。手动删除评论会有所帮助。

from bs4 import BeautifulSoup, Comment

bs = BeautifulSoup(
    """
    <a class="accordion-item__link" href="/identity-checking/individual"><!-- react-text: 178 -->Australia<!-- /react-text --></a>
    """,
    "lxml"
)
# find all HTML comments and remove
comments = bs.findAll(text=lambda text:isinstance(text, Comment))
[comment.extract() for comment in comments]

r = bs.find('a', text='Australia')
print(r)
#  <a class="accordion-item__link" href="/identity-checking/individual">Australia</a>

删除评论的方法来自How can I strip comment tags from HTML using BeautifulSoup?

如果要保留评论,您可以使用汤的副本。

答案 1 :(得分:0)

尝试在找到标记后提取文本,即:

result = ""
for tag in soup.find_all('a'):
    if tag.text == "Australia":
        result = tag

答案 2 :(得分:0)

出于某种原因,当存在<h3> <?php echo $article['title']; ?> </h3> <p class="content article-content"> <?php echo nl2br($article['content']); ?> </p> 评论时,检测到标记文本会被翻转。

您可以将其用作解决方法:

xml