【问题标题】:Get text from inside element without its children从没有子元素的内部元素中获取文本
【发布时间】:2021-04-06 15:17:24
【问题描述】:

我正在抓取一个包含多个 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

我在 Python 3 中使用 BeautifulSoup 4

编辑:当我使用时

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

它返回一个空列表

【问题讨论】:

  • 您有两个打开的&lt;div&gt; 标签。那是你真正拥有的吗?
  • 对不起,错字。固定。

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


【解决方案1】:

您可以将.find_next_sibling()text=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())

【讨论】:

  • 内容[-1] 应该被剥离
【解决方案2】:

您可以使用 xpath,它有点复杂,但提供了强大的查询功能。

这样的东西对你有用:

soup.xpath('//p[contains(@class, "default")]//text()[normalize-space()]')

【讨论】:

    猜你喜欢
    • 2016-02-29
    • 2016-07-02
    • 2012-04-14
    • 1970-01-01
    • 2015-03-09
    • 2017-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多