我正在尝试将一些内容附加到带有漂亮的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
(需要html5lib
to 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/