【问题标题】:Extracting Text Within Tags Inside HTML Comments with BeautifulSoup使用 BeautifulSoup 提取 HTML 注释内标签内的文本
【发布时间】:2025-02-20 12:00:02
【问题描述】:

我想在没有列表标签的评论中提取列表元素中的文本。但是我不能用下面的代码来做到这一点。

from bs4 import BeautifulSoup, Comment


html = """
<html>
<body>
<!--
  <ul>
     <li>10</li>
     <li>20</li>
     <li>30</li>
     </ul>
 -->

</body>
</html>
"""
soup = BeautifulSoup(html, 'html.parser')

for numbers in soup.findAll(text=lambda text:isinstance(text, Comment)):
    print(numbers.extract())

结果是:

<ul>
<li>10</li>
<li>20</li>
<li>30</li>
</ul>

想要的结果:

10
20
30

【问题讨论】:

    标签: python-3.x web-scraping beautifulsoup text-extraction


    【解决方案1】:

    试试下面的方法。它会获取你想要的结果。

    from bs4 import BeautifulSoup, Comment
    
    html = """
    <html>
    <body>
    <!--
      <ul>
         <li>10</li>
         <li>20</li>
         <li>30</li>
         </ul>
     -->
    
    </body>
    </html>
    """
    soup = BeautifulSoup(html, 'html.parser')
    
    for item in soup.find_all(text=lambda text:isinstance(text, Comment)):
        data = BeautifulSoup(item,"html.parser")
        for number in data.find_all("li"):
            print(number.text)
    

    输出:

    10
    20
    30
    

    【讨论】:

      【解决方案2】:

      查找所有“li”并仅打印文本。

      for tag in soup.find_all("li"):
              print(tag.text))
      

      【讨论】:

      • 它不起作用。列表项位于评论标签 之间。我可以从 cmets 中提取,但无法获取列表项中的文本。