我正在尝试将一些内容附加到带有漂亮的Soup python库的html页面主体中。

>>> 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

追加之后,我仍然看到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标记,您可以看到内容似乎就在那里。我觉得我不太明白附加操作。
编辑:
我不知道为什么,但似乎我可以附加标记,但不能附加根。例如,doc.html.body.append(body.ol)就如我所期望的那样工作。我也可以做for tag in body.children: doc.html.body.append(tag)
我的问题是为什么根不附加?

最佳答案

您应该附加body.ol而不是body。换句话说,附加一个Tag实例而不是一个BeautifulSoup实例:

>>> 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>

或者,如果您不知道哪个标记将成为父标记,请使用body.find()
您还可以将解析器切换到html5lib(需要html5libto be installed):
>>> 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>

关于python - 使用 BeautifulSoup 访问附加项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35121738/

10-15 17:42