首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python:解析SGML

Python:解析SGML
EN

Stack Overflow用户
提问于 2015-07-29 15:59:14
回答 1查看 3.6K关注 0票数 2

我正在尝试用Python解析一些SGML,如下所示:

代码语言:javascript
复制
<!DOCTYPE lewis SYSTEM "lewis.dtd">
<TEXT>
    <TITLE>One</TITLE>
    <BODY>Sample One</BODY>
</TEXT>
<TEXT>
    <TITLE>Two</TITLE>
    <BODY>Sample Two</BODY>
</TEXT>

在这里,我只是查找<BODY>标记(即["Sample One", "Sample Two"])中的所有内容。

我尝试过使用BeautifulSoup,但它不像第一行中的<!DOCTYPE>,而且还希望所有内容都包装在根标记(如<everything></everything> )周围。虽然我可以在将其传递到BeautifulSoup之前手动进行这些更改,但它感觉有点太老套了。

我对SGML非常陌生,也没有和BeautifulSoup结婚,所以我对任何建议都持开放态度。

(对于那些好奇的人:我的特定用例是reuters21578数据集。)

EN

回答 1

Stack Overflow用户

发布于 2015-07-29 16:06:23

您可以尝试使用'html.parser'而不是lxml-xml作为解析器。lxml-xml期望文本是正确的xml,但事实并非如此。

示例/演示-

代码语言:javascript
复制
>>> from bs4 import BeautifulSoup
>>> s = """<!DOCTYPE lewis SYSTEM "lewis.dtd">
... <TEXT>
...     <TITLE>One</TITLE>
...     <BODY>Sample One</BODY>
... </TEXT>
... <TEXT>
...     <TITLE>Two</TITLE>
...     <BODY>Sample Two</BODY>
... </TEXT>"""
>>> soup = BeautifulSoup(s,'html.parser')
>>> soup.find_all('body')
[<body>Sample One</body>, <body>Sample Two</body>]
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31694553

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档