您的位置:首页 > 编程语言 > Python开发

python网页解析之SGMLParser

2013-02-19 17:30 405 查看
鄙人学python不久,老看语法甚是无聊,便想找了一个例子玩玩。看到一个网页图片抓取的例子,源代码见http://blog.csdn.net/ipursuei/article/details/8591297,亲测可用。

其中比较重要的一个环节便是对html的解析。

我搜了一下常用的python的网页解析有

1. SGMLParser

2. HTMLParser

3. BeautifulSoup

4. lxml

其中前三种较为常用。本例子中用的是SGMLParser,这里稍加说明。

sgmllib.py 包含一个重要的类:
SGMLParser。SGMLParser 将 HTML 分解成有用的片段,比如开始标记和结束标记。一旦它成功地分解出某个数据为一个有用的片段,它会根据所发现的数据,调用一个自身内部的方法。为了使用这个分析器,您需要子类化
SGMLParser 类,并且覆盖这些方法。

当SGMLParser遇到一个开始标签的时候,如<pre id="a">,那么它则调用start_xx方法(这里xx就是pre),同时把属性名字和属性值传到方法中,万一此方法不存在,那么调用unknown_starttag方法。

对于一个结束标签,执行的流程也是类似,首先找end_xx方法,找不到的话调用unknown_endtag方法。

SGMLParser在过字符串的时候还能处理其余六种情况。字符引用,如 ,调用handle_charref()方法,同时把160作为参数;实体引用,如©,调用handle_entityref()方法,其中copy作为参数;调用handle_comment()方法处理注释;处理指令,如<?...>,调用handle_pi()方法,这个我很少接触;处理声明,对于HTML来说主要是DOCTYPE,调用handle_decl()方法;最后是处理普通文本的handle_data()方法。

当我们调用feed()方法后,以上八类方法就会在过字符串的时候自动调用,最后我们调用close()方法结束。

SGMLParser中对输入的字符串实际上不作处理,整个类只是作为一个框架。我们使用的时候可以继承这个类,并重写这些方法实现自己的需求。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Python WEB