gpt4 book ai didi

python - 在Python上使用replaceWith用BeautifulSoup替换HTML标签时出现问题

转载 作者:太空宇宙 更新时间:2023-11-03 19:36:10 25 4
gpt4 key购买 nike

我在 Python 中使用 BeautifulSoup,但在替换某些标签时遇到问题。我正在寻找<div>标签并检查 child 。如果这些子节点没有子节点(是 NODE_TYPE = 3 的文本节点),我会将它们复制为 <p> .

from BeautifulSoup import Tag, BeautifulSoup

class bar:

self.soup = BeautifulSoup(self.input)
foo()
def foo(self):
elements = soup.findAll(True)

for node in elements:

# ....other stuff here if not <div> tags.

if node.name.lower() == "div":
if not node.find('a'):
newTag = Tag(self.soup, "p")
newTag.setString(node.text)
node.replaceWith(newTag)
nodesToScore.append(newTag)
else:
for n in node.findAll(True):
if n.getString(): # False if has children
newTag = Tag(self.soup, "p")
newTag.setString(n.text)
n.replaceWith(newTag)

我收到一个属性错误:

  File "file.py", line 125, in function
node.replaceWith(newTag)
File "BeautifulSoup.py", line 131, in replaceWith
myIndex = self.parent.index(self)
AttributeError: 'NoneType' object has no attribute 'index'

我对 node 进行相同的替换在 for 循环的较高位置并且它工作正常。我假设它有问题,因为额外迭代节点为 n。

我做错了什么或者更好的方法是什么?谢谢!附言。我正在使用 Python 2.5 for Google Appengine 和 BeautifulSoup 3.0.8.1

最佳答案

错误提示:

    myIndex = self.parent.index(self)
AttributeError: 'NoneType' object has no attribute 'index'

此代码出现在 BeautifulSoup.py 的第 131 行。它说 self.parent 是 None。

查看周围的代码表明,代码中的 self 应该等于 node,因为 node 正在调用其 replaceWith 方法。(注意:错误消息显示 node.replaceWith,但您发布的代码显示 n.replaceWith。您发布的代码与错误消息不对应/traceback。)所以显然 node.parent 是 None。

您可以通过放置来避免错误

if node.parent is not None:

在调用 node.replaceWith 之前代码中的某个时刻。

编辑:我建议您使用 print 语句来调查当 node.parent 为 None 时您在 HTML 中的位置(即发生错误的位置)。也许使用 print node.contentsprint node.previous.contentsprint node.next.contents 来查看您所在的位置。一旦您看到 HTML,您可能会清楚地知道您所处的病态情况导致 node.parentNone

关于python - 在Python上使用replaceWith用BeautifulSoup替换HTML标签时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3461814/

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