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()

    

posted on 2015-01-30 10:58  joker_02  阅读(912)  评论(0编辑  收藏  举报

导航