Python学习笔记[6]--SGMLParser
-----待解决问题-----
1、重写__init__和reset()函数时,会报错。
----大概与不知如何实现有关
2、同一标签下,多个相同标签只提取特定内容-不知如何做。
solution:如果排列有规律的表格中,可以增加一个变量定位相关标签
------正文--------
SGMLPaser是Python2.x中自带的处理html的模块,是HTMLParser的父集。
如果需要可以将其子类化,根据需求重写相关函数即可。
相关的demo--转
#!/usr/bin/env python #-*-coding:utf-8-*- from htmlentitydefs import entitydefs from HTMLParser import HTMLParser import urllib import time class ImgParser(HTMLParser): num = 1 def __init__(self): #定义要搜寻的标签 self.processing = None HTMLParser.__init__(self) #继承父类的构造函数 self.addr='' def handle_starttag(self,tag,attrs): #判断是否在要搜寻的标签内 if tag == 'img': print 'pic'+str(self.num) + " : " + tag self.num += 1 for key,value in attrs: if key == 'src': self.addr = value #在类的成员函数中,使用类中的另一个成员函数,前面必须要指定类名 ImgParser.getImage(self) #合法 print key + " : " + value if key == 'alt': print key + " : " + value def getImage(self): u = urllib.urlopen(self.addr) data = u.read() filename = self.addr.split('/')[-1] timestr = time.strftime('%Y%m%d%S',time.localtime(time.time())) f = open('/home/dzhwen/python文件/Homework/urllib/pic/'+timestr+filename,'wb') f.write(data) f.close() parser = ImgParser() f = urllib.urlopen('http://www.sina.com.cn/') #抓取新浪网上以img标签开头的图片 parser.feed(f.read())
-----------------------补遗----------------------------------------------------
在SGMLParser(3.x中全部集成在htmllib.parser的HTMLParser)中,要提取相关的标签下的内容,重写
handle_starttag()、handle_endtag()、handle_data()函数即可
也可以重写start_tag() end_tag()