我的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/