python - 在 BeautifulSoup 中,在获取父元素数据时忽略子元素

标签 python html beautifulsoup

我的html如下:

<html>
    <div class="maindiv">
        text data here 
        <br>
        continued text data
        <br>
        <div class="somename">
            text & data I want to omit
        </div>
    </div>
</html>

我试图仅获取 maindiv 中找到的文本元素,而不获取 somename 中找到的文本数据元素。在大多数情况下,根据我的经验,大多数文本数据都包含在某个子元素中。我遇到过这种特殊情况,但其中的数据似乎有些不情愿,而且过滤起来有点困难。

我的方法如下:

textdata= soup.find('div', class_='maindiv').get_text()

这将获取 maindiv 中找到的所有文本数据。元素,以及 somename 中找到的文本数据div 元素。

我想使用的逻辑更多的是: textdata = soup.find('div', class_='maindiv').get_text(recursive=False)这将省略 somename 中找到的任何文本数据。元素。

我知道recursive=False使用 BeautifulSoup 搜索 DOM 结构时,参数仅适用于定位父级元素,但不能与 .get_text() 一起使用。方法。

我已经实现了查找所有文本,然后减去 somename 中找到的字符串数据的方法。 maindiv 中找到的字符串数据中的元素元素,但我正在寻找更有效的东西。

最佳答案

与您的减法方法相差不大,但一种方法(至少在 Python 3 中)是丢弃所有子 div。

s = soup.find('div', class_='maindiv')

for child in s.find_all("div"):
    child.decompose()

print(s.get_text())

会打印如下内容:

text data here

        continued text data

这可能比减去字符串更高效、更灵活,尽管它仍然需要首先遍历子级。

关于python - 在 BeautifulSoup 中,在获取父元素数据时忽略子元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40660273/

相关文章:

python - 使用 Selenium 保存在浏览器中打开的 pdf

Python flask 0.10 : fix exception being thrown

python - 从列表文件中查找包含至少一个单词的所有短语并将它们保存到新文件中

javascript - 从 HTML 获取数据到 Javascript (jQuery)

asp.net - 如何使用 ASP.NET 在纯 HTML 页面上进行表单例份验证?

python - HTML 表格与 python 美丽汤

python - 从声音文件中检测频率

jquery - 如何使用当前元素添加事件类并从所有其他元素中删除

python - 抓取一个非常典型的文本 block

css - Beautiful Soup 无法区分 CSS 类