我希望解析许多html页面,并使用beautifulsoup html.parser和python删除包含文本"Message“的div。div没有名称或id,因此指向它是不可能的。我可以为1 html页面这样做。在下面的代码中,您将看到6 .parent。这是因为在这个html页面中,div标记和文本"Message“之间有5个标记(p,i,b,span,a),第6个标记是div。下面的代码适用于1 html页面。
soup = BeautifulSoup(html_page,"html.parser")
scores = soup.find_all(text=re.compile('Message'))
divs = [score.parent.parent.parent.parent.parent.parent for score in scores]
divs.decompose()问题是-- div和"Message“之间的标记数并不总是6,在某些html页面中,它是3,在大约7。
那么,是否有一种方法可以动态地在文本"Message“和最近的div之间找到标记(n)的数目,并使用n+1、beautifulsoup将.parent的数目添加到(在上面的代码中)。
发布于 2022-11-30 18:47:05
正如在您的问题中所描述的,在这个问题之间没有其他<div>,您可以使用.find_parent()
soup.find(text=re.compile('Message')).find_parent('div').decompose()请注意,如果使用find_all(),则必须在取消.find_parent()时迭代ResultSet
for r in soup.find_all(text=re.compile('Message')):
r.find_parent('div').decompose()就像在您的示例divs.decompose()中一样,您还应该迭代list。
示例
from bs4 import BeautifulSoup
import re
html='''
<div>
<span>
<i>
<x>Message</x>
</i>
</span>
</div>
'''
soup = BeautifulSoup(html)
soup.find(text=re.compile('Message')).find_parent('div')https://stackoverflow.com/questions/74632532
复制相似问题