我试图在Python中解析一些SGML,如以下所示:
<!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数据集)
您可以尝试使用'html.parser'
而不是lxml-xml
作为解析器。lxml-xml
期望文本是正确的xml,但事实并非如此。
例子/演示-
>>> 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>]