python - 为什么 beautiful soup 无法正确解析名为 "area"的元素?

标签 python xml parsing beautifulsoup

我正在编写一个使用 beautiful soup 的 python 脚本解析 xml 文档。一些文档包含名为“area”的元素。由于某种原因,我一生都无法正确解析这些元素。它们总是显示为空 <area/>元素。

这是正在发生的事情的一个最小示例:

#!/usr/bin/python3.5
from bs4 import BeautifulSoup

xml = """""
<?xml version = '1.0' encoding = 'UTF-8' standalone = 'yes'?>

<root>
    <areax>
        foo
    </areax>
    <area>
        bar
    </area>
</root>
"""""
soup = BeautifulSoup (xml, "lxml")

print ("\n#### soup ####\n")
print (soup)

print ("\n#### areax ####\n")
areaxs = soup.find_all ("areax")
for areax in areaxs:
    print (areax)

print ("\n### area ###\n")
areas = soup.find_all ("area")
for area in areas:
    print (area)

输出:

#### soup ####

<html><body><p>""
<?xml version = '1.0' encoding = 'UTF-8' standalone = 'yes'?>
<root>
<areax>
        foo
    </areax>
<area/>
        bar

</root>
</p></body></html>

#### areax ####

<areax>
        foo
    </areax>

### area ###

<area/>

元素名称“area”是否受到任何方式的保护,或者我解析它的方式是否存在其他问题?

最佳答案

您的文档被解析为 HTML,并且 area element 是一个空的 HTML 元素(不能有任何子元素)。

要将其解析为 XML,请使用 BeautifulSoup(xml, "xml") ( docs ):

By default, Beautiful Soup parses documents as HTML. To parse a document as XML, pass in “xml” as the second argument to the BeautifulSoup constructor:

soup = BeautifulSoup(markup, "xml")

You’ll need to have lxml installed.


另一个问题是您的 xml 字符串周围有太多引​​号,因此它实际上以 "" 开头(尝试打印它)。恰好三个引号 (""") 就足够了。

关于python - 为什么 beautiful soup 无法正确解析名为 "area"的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47457069/

相关文章:

python - 我试图向我的基于 pygame 的游戏添加简单的碰撞,但它不起作用

python - 如何获取作为字典的数据帧的列的值

c# - 将字符串列表或字符串数​​组传递到 Unity 注入(inject)构造函数(基于配置)

c# - 使用 C# 使用 Linq 更新 XML

ruby-on-rails - 您将如何解析 Ruby 中的 url 以获取主域?

python - 如何重命名具有相同列名的数据框的列?

python - 正则表达式两组匹配所有内容直到模式

XML命名空间,无法选择节点

regex - 明智地解析科学记数法?

java - 在 Java 中读取一个 json 文件