python网页解析之SGMLParser

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

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

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

1. SGMLParser
2. HTMLParser
3. BeautifulSoup
4. lxml

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

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

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

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


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


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


SGMLParser中对输入的字符串实际上不作处理,整个类只是作为一个框架。我们使用的时候可以继承这个类,并重写这些方法实现自己的需求。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值