【问题标题】:python beautifulsoup adds html tags to svgpython beautifulsoup 为 svg 添加 html 标签
【发布时间】:2018-08-27 19:39:56
【问题描述】:

在解析 SVG 文件时,我注意到 beautifulsoup 向其中添加了 html 标签。

from bs4 import BeautifulSoup
soup = BeautifulSoup('<svg></svg>', 'lxml')
print(soup)

结果:

<html><body><svg></svg></body></html>

为什么会这样,可以避免吗?

【问题讨论】:

    标签: python svg beautifulsoup


    【解决方案1】:

    您使用lxml 解析器,它是 HTML 解析器。要解析 XML,您应该使用 xml 解析器:

    from bs4 import BeautifulSoup
    soup = BeautifulSoup('<svg></svg>', 'xml')
    print(soup)                       # ^^^^^^
    

    来自 BeautifulSoup 文档:

    Beautiful Soup 将相同的界面呈现给许多不同的 解析器,但每个解析器都是不同的。不同的解析器将创建 来自同一文档的不同解析树。 最大的不同 位于 HTML 解析器和 XML 解析器之间。 这里有一个简短的 文档,解析为 HTML:

    BeautifulSoup("<a><b /></a>")
    # <html><head></head><body><a><b></b></a></body></html>
    

    由于空标签不是有效的 HTML,解析器会将其转换为 标记对。

    这是解析为 XML 的同一个文档(运行它需要您 已安装 lxml)。请注意,空标签是单独留下的,并且 文档被赋予一个 XML 声明而不是被放置 进入标签。:

    BeautifulSoup("<a><b /></a>", "xml")
    # <?xml version="1.0" encoding="utf-8"?>
    # <a><b/></a>
    

    来源:Differences between parsers,重点是我的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-04
      • 2021-08-10
      • 2020-03-08
      • 1970-01-01
      • 2013-02-03
      • 2011-02-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多