【问题标题】:Extracting HTML tag contents using Python使用 Python 提取 HTML 标记内容
【发布时间】:2015-01-04 08:16:06
【问题描述】:

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

你可以在这里看到它:https://github.com/watty62/jazz_birthdays/blob/master/jazz_birthdays.doc

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

我在 Libre Office 中打开了文档并将其保存为 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>

每个日期都包含在&lt;FONT SIZE=4&gt; &lt;/FONT&gt; 标签中(尽管这些标签偶尔用于其他目的。

快速统计一下,&lt;FONT SIZE=4&gt; 被使用了 377 次 - 所以现在假设一年中的所有 366 天都在那里,那么我将不得不忽略它的 11 次使用。

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

在那之后,我想我会简化每一行 - 虽然这些会变得复杂,名称(可能包含昵称)、演奏的乐器以逗号分隔、出生年份和死亡日期(在括号中并以“d”开头.") - 以后会遇到更多问题。

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

我不是在寻找解决方案(因为它是一个真正的大问题),但希望能得到有关方法、库等方面的任何提示,以帮助我入门。

谢谢

伊恩

【问题讨论】:

    标签: python html json tags beautifulsoup


    【解决方案1】:

    我希望这就是您正在寻找的(如果不是,请告诉我,以便我可以为您删除我的答案):

    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"\d{1,2} \w+"。字符串前面的 r 告诉 python 忽略反斜杠,以便 re 可以将它们用于它的目的。 \d 表示一个数字。 {1,2} 表示一次或两次。空间只是空间的意思。 \w 表示单词字符。而 + 表示一个或多个。

    【讨论】:

    • 我的荣幸;我认为正则表达式很棒。上帝保佑,祝你学习愉快!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多