Python 这是一道美味的汤
我正试图使用漂亮的python库将一些内容附加到html页面的主体中Python 这是一道美味的汤,python,beautifulsoup,Python,Beautifulsoup,我正试图使用漂亮的python库将一些内容附加到html页面的主体中 >>> from bs4 import BeautifulSoup >>> doc = BeautifulSoup("<html><head></head><body></body></html>", "html.parser") >>> body = BeautifulSoup("<ol>
>>> from bs4 import BeautifulSoup
>>> doc = BeautifulSoup("<html><head></head><body></body></html>", "html.parser")
>>> body = BeautifulSoup("<ol><li>1</li><li>2</li></ol>", "html.parser")
>>> print doc.html.body.ol
None
>>> doc.html.body.append(body)
>>> print doc.html.body.ol
None
>>来自bs4导入组
>>>doc=BeautifulSoup(“,“html.parser”)
>>>body=BeautifulSoup(“1 2 ”,“html.parser”)
>>>打印doc.html.body.ol
没有一个
>>>doc.html.body.append(body)
>>>打印doc.html.body.ol
没有一个
追加后,我仍然看到ol标记为空
>>> body.ol
<ol><li>1</li><li>2</li></ol>
>>> doc.html.body
<body><ol><li>1</li><li>2</li></ol></body>
>>>
>>body.ol
1 2
>>>doc.html.body
1 2
>>>
不过。如果我打印整个body标签,您可以看到内容似乎在那里。我觉得我不太理解append操作
编辑:
我不知道为什么,但似乎我可以附加标记,但不能附加根。例如,doc.html.body.append(body.ol)
按照我的预期工作。我还可以对body.children:doc.html.body.append(tag)中的标记执行
我的问题是为什么根不附加?您应该附加body.ol
而不是body
。换句话说,附加一个标记
实例,而不是美化组
实例:
>>> from bs4 import BeautifulSoup
>>>
>>> doc = BeautifulSoup("<html><head></head><body></body></html>", "html.parser")
>>> body = BeautifulSoup("<ol><li>1</li><li>2</li></ol>", "html.parser")
>>>
>>> doc.html.body.append(body.ol)
>>>
>>> print(doc.html.body.ol)
<ol><li>1</li><li>2</li></ol>
我仍然不理解append的预期行为,因为解析器似乎不应该更改此行为,因为此时它应该已经被“解析”。对于body.children:doc.html.body.append(tag)
来说,解决这个问题的方法似乎是:for-tag in-body.children:doc.html.body.append(tag)
出于某种原因,根目录不会随html一起追加。parser@rileymat很抱歉最后的评论,这是另一种方式,但这并不完全相关-删除了评论。更新了答案,说明了如何在不更改解析器的情况下使其工作。谢谢,在这个精心设计的示例中,我知道它下面是一个ol标记,但在我的实际应用中,我不知道它将是什么。在孩子们身上反复练习似乎很有效。将其更改为iterate,我将接受答案,因为它可能会帮助某些人。不过,对于解析器来说,这是一个奇怪的区别。@RileMat是的,您可以使用body.find()
来获取父元素。谢谢,我同意,现在还不完全清楚发生了什么。
>>> from bs4 import BeautifulSoup
>>>
>>> doc = BeautifulSoup("<html><head></head><body></body></html>", "html5lib")
>>> body = BeautifulSoup("<ol><li>1</li><li>2</li></ol>", "html5lib")
>>>
>>> doc.html.body.append(body)
>>> print(doc.html.body.ol)
<ol><li>1</li><li>2</li></ol>