【问题标题】:Using BeautifulSoup to parse XML with tags that contain colon使用 BeautifulSoup 解析带有冒号标签的 XML
【发布时间】:2019-02-22 14:19:20
【问题描述】:

我在解析使用 BeautifulSoup 获得的 XML 时遇到了一些困难,尽管我已经阅读了文档,但我似乎无法让它与我的 XML 设置方式正常工作。

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xml" href="/static/atom.xsl"?>
<feed xmlns:s="server url here">
    <!-- Feed elements>
    <entry>
        <!-- Other Elements -->
        <content type="text/xml">
            <s:dict>
                <!-- Other keys. -->
                <s:key name="sid">DATA I WANT HERE</s:key>
                <!-- Other keys. -->
            </s:dict>
            <!-- Lots of other dicts here. -->
        </content>
    </entry>
    <! -- Other entries -->
</feed>

我的目标是从属性为name 且值为sid 的所有s:key 中获取数据。 (即所有s:key 都有一个name,但每个&lt;entry&gt; 只有一个是sid 类型。

如何在我的数据中打印出sid 类型的相关s:key 之间的所有文本?

我试过的是:

print(tree.findAll('key', {'name'}))

还有:

for elem in tree.feed.entry.content.dict.key:
    print(elem)

但显然这些都是有缺陷的,不能按我的意愿正常工作。

我如何完成我想要获得的?

【问题讨论】:

  • 顺便说一句,xml 不需要 beautifulsoup。如果输入可能不像某些网页那样完全有效,那么漂亮的汤很有用。 xml文档通常是完美的,可以直接解析:docs.python.org/3.7/library/xml.etree.elementtree.html
  • @balki 很高兴知道,但是我在正确使用元素树方面遇到了麻烦,而且汤似乎更容易理解/使用。

标签: python xml python-3.x beautifulsoup xml-parsing


【解决方案1】:

试试下面的代码:

soup = bs4.BeautifulSoup(html_doc, 'lxml')
elements = soup.findAll("s:key", {"name" : "sid"})
for lele in elements:
    print(lele.text)

输出:-

DATA I WANT HERE

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-04
    • 1970-01-01
    • 2013-05-31
    • 1970-01-01
    • 1970-01-01
    • 2012-11-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多