首页 > 解决方案 > 从没有子元素的内部元素中获取文本

问题描述

我正在抓取一个包含多个p元素的网页,我想在其中获取文本而不包括他们的孩子。

页面结构如下:

<p class="default">
    <div>I don't want this text</div>
    I want this text
</p>

当我使用 parent.find_all("p", {"class": "default").get_text()这是我得到的结果:

I don't want this text
I want this text

我正在使用 BeautifulSoup 4 和 Python 3

编辑:当我使用

parent.find_all("p", {"class": "public item-cost"}, text=True, recursive=False)

它返回一个空列表

标签: pythonpython-3.xweb-scrapingbeautifulsoup

解决方案


您可以使用.find_next_sibling()withtext=True参数:

from bs4 import BeautifulSoup

html_doc = """
<p class="default">
    <div>I don't want this text</div>
    I want this text
</p>
"""

soup = BeautifulSoup(html_doc, "html.parser")

print(soup.select_one(".default > div").find_next_sibling(text=True))

印刷:

I want this text

或使用.contents

print(soup.find("p", class_="default").contents[-1])

编辑:剥离字符串:

print(soup.find("p", class_="default").contents[-1].strip())

推荐阅读