HTMLParser自学笔记

第一天:

HTMLParse导入一开始会出现的问题:

import HTMLParser 会出现 :

TypeError: Error when calling the metaclass bases
    module.__init__() takes at most 2 arguments (3 given)

原因:

>>> import HTMLParser
>>> type(HTMLParser)
<type 'module'>

未将HTMLParser模块引入

解决办法:from HTMLParser import HTMLParser


一些HTMLParser的方法;

HTMLParser.reset()

重置该实例。失去所有未处理的数据。这个在实例化对象时被隐含地调用。

HTMLParser.feed(data)

提供一些文本给解析器。在由完整元素组成的限度内进行处理,不完整的数据被缓冲直到更多的数据提供或者close()被调用。

HTMLParser.close()

强制将所有的缓冲数据按跟在结束标记的数据一样进行处理。该方法可以通过派生类定义对输入结尾的额外处理来进行重定义,但是重定义的版本应该总是调用HTMLParser基类方法close()

HTMLParser.getpos()

返回当前行数和位移值。

HTMLParser.get_starttag_text()

返回文本最近的开放标签。

HTMLParser.handle_starttag(tagattrs)

该方法用来处理开始标签。其目的是被派生类重写;基类什么也不实现。tag参数是转换成小写的标签名称。attrs参数是一个(name,value)对包含了在标签<>中得属性。name将会转换成小写,并且value中得引号会被引出,并且字符串和实体引用将会被替代。

例如,对于标签<A HREF="http://www.cwi.nl/">,该方法将会调用为handle_starttag('a', [('href', 'http://www.cwi.nl/')])

Changed in version 2.6: All entity references from htmlentitydefs are now replaced in the attribute values.

HTMLParser. handle_startendtag ( tag attrs )

类似于handle_starttag(),不过用来处理遇到XHTML风格的空标签(<a .../>)。

HTMLParser.handle_endtag(tag)

该方法用来处理元素的结束标签。

HTMLParser.handle_data(data)

该方法用来处理任意的数据

HTMLParser.handle_charref(name)

该方法用来处理&#ref;形式的字符引用。

HTMLParser.handle_entityref(name)

该方法用来处理形式&name;的一般实体引用,参数name是一般的实体引用。

HTMLParser.handle_comment(data)

该方法用来处理遇到的评论。

HTMLParser.handle_decl(decl)

当解析器读到一个SGML的doctype声明该方法被调用。

HTMLParser.unknown_decl(data)

当解析器读到一个未被识别SGML声明时将调用该方法。

HTMLParser.handle_pi(data)

当遇到一个处理指令时将调用该方法。


下面是一个关于HTMLParser的小实例:

from HTMLParser import HTMLParser
import urllib2
import sys
reload(sys)
sys.setdefaultencoding('GBK')
class MyHtmlParser(HTMLParser):
	def __init__(self):
		HTMLParser.__init__(self)
		self.links=[]
	def handle_starttag(self,tag,attrs):
		if tag=='a':
			if len(attrs)==0:
				pass
			else:
				for(variable,value) in attrs:
					if variable=='href':
						self.links.append(value)
if __name__ == '__main__':
	html_code=urllib2.urlopen('http://www.163.com').read()
	
	hp=MyHtmlParser()
	hp.feed(html_code)
	hp.close()
	print(hp.links)
这是一个将网页所有连接提取出来的简单实例,

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值