[zz]Python HTML 解析

1 Python HTML 解析

1.1 缘由

为了将CHM文件转变成Devhelp支持的格式,以便用devhelp来阅读。 解析索引文件,构建标签。

HTML -> XML

作为一个标记语言,HTML其实是一个结构化的文本,对它的处理,可以分三步:

分解

将HTML文档按照标记分分解,得到一些列的小的片段。

处理

对这些小片段进行处理。

组合

将处理过的片段重新组合。

三个步骤中,第一步可由Python自带的sgmlib来完成。

1.2 SGMLib

sgmlib 中包含了一个重要的类:SGMLParser, 这个可以将一个HTML文档根据Tag解析 成为很多的片段,并根据Tag类型来调用该类中相应的函数来处理这些片段。为了按照 自己的意愿来处理这些片段,我们需要从SGMLparser继承出一个新类,然后重写其中 的Tag的处理函数。

SGMLib 可将HTML解析成为8种类型的数据,并对每种数据调用相应的函数。

  • Start tag
    • 标记一个文本块的开始的Tag, 如 <html>, <head>, <body>, <pre>, <br>, <img>
      等等。
    • 相应函数为: start_tagname, 或者 do_tagname,
    • 参数为该Tag的Attribute。

      例如, 对<pre>这个Tag,如果start_pre或者do_pre存在,则这两个函数会被调 用;如果这两个函数不存在,则调用缺省函数: unknown_starttag。

  • End tag
    • 标记文本块结束的Tag,如 </html>, </body>等。
    • 对应函数: end_tagname, 如end_pre,
    • 参数:None
  • Character reference
    • 转义的字符。HTML中以&加上数字表示转义。
    • 对应函数: handle_charref
    • 参数:被转义的数字。
  • Entity reference
    • HTML entity, 如 &copy
    • 对应函数: handleentityref
    • 参数: Entity的名字。
  • Comment
    • HTML comment, 形如 <!– … –>.
    • 对应函数: handlecomment
    • 参数:comment的内容。
  • Processing instruction
    • HTML中的处理指令,形如: <? … >.
    • 对应函数:handlepi
    • 参数 Instruction 的内容
  • Declaration
    • HTML的声明,例如DOCTYPE。
    • 对应函数:handledecl
    • 参数: Declaration的内容
  • Text data
    • 文本段,指除了上述7种以外的所有文本。
    • 对应函数: handledata.
    • 参数: 文本内容

posted @ 2011-07-01 22:43  cactuswisper  阅读(1728)  评论(0编辑  收藏  举报