Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 这是一道美味的汤_Python_Beautifulsoup - Fatal编程技术网

Python 这是一道美味的汤

Python 这是一道美味的汤,python,beautifulsoup,Python,Beautifulsoup,我正试图使用漂亮的python库将一些内容附加到html页面的主体中 >>> from bs4 import BeautifulSoup >>> doc = BeautifulSoup("<html><head></head><body></body></html>", "html.parser") >>> body = BeautifulSoup("<ol>

我正试图使用漂亮的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
>>来自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>