【问题标题】:BeautifulSoup4 unable to find "a" tag by searching for textBeautifulSoup4 无法通过搜索文本找到“a”标签
【发布时间】:2018-10-12 12:27:12
【问题描述】:

示例 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 也返回 'Australia'

和cmets有关系吗?

【问题讨论】:

    标签: python beautifulsoup


    【解决方案1】:

    我正在尝试找到一种坚持find 方法的方法,因为它最方便且适应性强。这里的问题是 HTML cmets 搞乱了引擎。手动删除 cmets 会很有帮助。

    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>
    

    去除cmets的方法来自这里How can I strip comment tags from HTML using BeautifulSoup?

    如果要保存这些 cmets,您可以制作一份汤的副本。

    【讨论】:

      【解决方案2】:

      由于某种原因,当有xml 评论时,检测标签文本会被翻转。

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

      [ele for ele in soup('a') if ele.text == 'Australia']
      

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-08-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多