gpt4 book ai didi

python - 如何在 python 的 BeautifulSoup4 中使用 .next_sibling 时忽略空行

转载 作者:太空狗 更新时间:2023-10-29 22:13:19 26 4
gpt4 key购买 nike

因为我想删除 html 网站中重复的占位符,所以我使用 BeautifulSoup 的 .next_sibling 运算符。只要重复项在同一行,就可以正常工作(参见数据)。但有时它们之间有一个空行 - 所以我希望 .next_sibling 忽略它们(看看 data2)

这是代码:

from bs4 import BeautifulSoup, Tag
data = "<p>method-removed-here</p><p>method-removed-here</p><p>method-removed-here</p>"
data2 = """<p>method-removed-here</p>

<p>method-removed-here</p>

<p>method-removed-here</p>

<p>method-removed-here</p>

<p>method-removed-here</p>
"""
soup = BeautifulSoup(data)
string = 'method-removed-here'
for p in soup.find_all("p"):
while isinstance(p.next_sibling, Tag) and p.next_sibling.name== 'p' and p.text==string:
p.next_sibling.decompose()
print(soup)

数据输出符合预期:

<html><head></head><body><p>method-removed-here</p></body></html>

data2 的输出(这需要修复):

<html><head></head><body><p>method-removed-here</p>

<p>method-removed-here</p>

<p>method-removed-here</p>

<p>method-removed-here</p>

<p>method-removed-here</p>
</body></html>

我在 BeautifulSoup4 文档中找不到有用的信息,.next_element 也不是我要找的。

最佳答案

我可以通过变通方法解决这个问题。 google-group for BeautifulSoup 中描述了该问题他们建议对 html 文件使用预处理器:

 def bs_preprocess(html):
"""remove distracting whitespaces and newline characters"""
pat = re.compile('(^[\s]+)|([\s]+$)', re.MULTILINE)
html = re.sub(pat, '', html) # remove leading and trailing whitespaces
html = re.sub('\n', ' ', html) # convert newlines to spaces
# this preserves newline delimiters
html = re.sub('[\s]+<', '<', html) # remove whitespaces before opening tags
html = re.sub('>[\s]+', '>', html) # remove whitespaces after closing tags
return html

这不是最好的解决方案,而是一个。

关于python - 如何在 python 的 BeautifulSoup4 中使用 .next_sibling 时忽略空行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23241641/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com