首页 > 解决方案 > 删除评论标签,但不包含 BeautifulSoup 的内容

问题描述

我正在使用 BeautifulSoup 练习一些网络抓取,特别是我正在查看 NFL 比赛数据,更具体地说是此页面上的“团队统计数据”表(https://www.pro-football-reference.com/boxscores/201809060phi。 .htm)。

在查看表格的 HTML 时,我看到如下内容:

<div class="section_heading">...</div>
<div class="placeholder"></div>
<!--
    <div class="table_outer_container">
        <div class="overthrow table_container" id="div_team_stats">
            <table class="stats_table" id="team_stats" data-cols-to-freeze=1>
                ....
            </table>
        </div>
    </div>
-->

本质上,呈现到页面的 HTML 作为注释存储在 HTML 中,因此我可以找到表格的 div,但 BeautifulSoup 无法解析表格本身,因为它都在注释中。

有没有解决这个问题的好方法,所以我可以用 BeautifulSoup 解析表格 HTML?我想出了如何提取评论文本,但我不知道是否有一种将结果字符串转换为可用 HTML 的好方法。或者,可以简单地删除评论标签,我认为这会让它被解析为 HTML,但我也没有找到一个好的方法来做到这一点。

标签: pythonhtmlbeautifulsoup

解决方案


from bs4 import BeautifulSoup, Comment
for comments in soup.findAll(text=lambda text:isinstance(text, Comment)):
    comments.extract()

从这里您将能够获取所有评论并获取评论之间的文本并将其放入 BS4 以提取其中的数据。希望这有效。


推荐阅读