使用Python提取HTML标记内容

时间:2014-11-07 13:58:52

标签: python html json tags beautifulsoup

我有一个运行到188页的Word文档,主要使用字体大小来表示结构。

您可以在此处查看:https://github.com/watty62/jazz_birthdays/blob/master/jazz_birthdays.doc

使用Python(我的首选语言)我想提取内容并将其保存为json等数据格式。

我在Libre Office中打开了doc并将其保存为HTML,并尝试将其作为备用XML文件导出。

您可以看到XMl和HTML文件here 两者似乎都产生了结构合理的文档,但从XML中提取含义更加困难

<para>1 January   </para>
<para>Helmut Brandt, baritone sax, 1931 (July 26, 2001)</para> 

在HTML版本中,我们最终得到了

    <P LANG="en-US" STYLE="margin-top: 0.18cm; margin-bottom: 0.18cm; page-break-after: avoid">
<FONT SIZE=4>1 January   </FONT>
</P>
<P LANG="en-US" CLASS="western" STYLE="font-weight: normal">Helmut
Brandt, baritone sax, 1931 (July 26, 2001)</P>

每个日期都包含在<FONT SIZE=4> </FONT>标记中(尽管这些标记偶尔用于其他用途。

快速计算给出<FONT SIZE=4>的377次使用 - 所以假设现在一年中所有366天都在那里,那么我将不得不忽略它的11次使用。

我的方法是用一些东西替换第一个<Font size=4>来表示它是日期字段的开头,例如<Date>然后每个后续的一个 结束日期(在那个生日的所有音乐家之后)并打开下一个日期</Date><Date>

之后我认为我会简化每一行 - 虽然这些会变得复杂但名称(可能包含昵称),用逗号,出生年份和死亡日期分隔的乐器(括号和开头) &#34; d。&#34;) - 以后会有更多的事情进入。

使用Beautiful soup解析文件的初始尝试会在原始文件中引发一些编码错误。

我没有寻找解决方案(因为它是一个真正的大人物),但我会感谢任何关于进场,图书馆等的提示让我开始。

由于

伊恩

1 个答案:

答案 0 :(得分:0)

我希望这就是你要找的东西(如果它不是那么请告诉我,以便我可以删除你的答案):

import re
s="""<P LANG="en-US" STYLE="margin-top: 0.18cm; margin-bottom: 0.18cm; page-break-after: avoid">
<FONT SIZE=4>1 January   </FONT>
</P>
<P LANG="en-US" CLASS="western" STYLE="font-weight: normal">Helmut
Brandt, baritone sax, 1931 (July 26, 2001)</P>"""
print re.findall(r"\d{1,2} \w+",s)

此输出:

['1 January']

作为一个快速解释,re模块是一种奇特的搜索机制。它的final()方法采用搜索模式和要搜索的字符串。我给它提供了模式r&#34; \ d {1,2} \ w +&#34;。字符串前面的r告诉python忽略反斜杠,以便re可以将它们用于它的目的。 \ d表示数字。 {1,2}表示一两次。空间只是一个空间。 \ w表示单词字符。 +表示一个或多个。