python3 解析html

来源:互联网 发布:wtybill 知乎 编辑:程序博客网 时间:2024/06/10 01:48

解析html模块 html.parser.HTMLParser

a).要自己实现一个HTMLParser的子类对自己所需要的标签进行处理
class MyHTMLParser(HTMLParser):
    def __init__(sefl):
        HTMLParser.__init__(sefl):
        //...自定义初始化方法,可以进行一些初始化
    def handle_starttag(self,tag,attrs):
        //...
    def handle_endtag(self,tag):
        //...
    def handle_data(self,data):
        //....
    def handle_entityref(self,name):
        //处理实体
class ParserHTML(HTMLParser):
    """
             解析html页面
             字典interestTag 对哪些标签进行解析   {"要查找的标签":{"根据属性再次过滤标签":"对应属性的值","MATCH_ATTR":"要得到的属性"}}  
    """
    def __init__(self,interestTag={}):
        HTMLParser.__init__(self)
        self.interestTag = interestTag
    def handle_starttag(self, tag,attrs):
        #处理标签 tag是标签 attrs是标签内的属性
        if {} == self.interestTag:
            print("return")
            return
        for targetTag,value in self.interestTag.items():
            if tag == targetTag:
                for targetTagAttrName,targetTagAttrValue in value.items():
                    if "MATCH_ATTR" != targetTagAttrName:
                        matchAttr = value.get("MATCH_ATTR","")
                        if "" == matchAttr:
                            raise RuntimeError("要匹配的属性不能为空")
                        for attr in attrs:
                            #attr包含属性的元组 (属性名,属性值)
                            if targetTagAttrName == attr[0] and targetTagAttrValue == attr[1]:
                                for tr in attrs:
                                    if matchAttr == tr[0]:
                                        #这里取得标签里指定属性的值
                                        download4Urllib(tr[1],tr[1][tr[1].rfind('/')+1:],"G:/image")

测试:parser = ParserHTML({"img":{"class":"BDE_Image","MATCH_ATTR":"src"}})

parser.feed('<div id="post_content_48081892290" class="d_post_content j_d_post_content ">                                        <img class="BDE_Image" id="img" src="http://imgsrc.baidu.com/forum/w%3D580/sign=c699c69638f33a879e6d0012f65d1018/4fd2c6faaf51f3dea72ffcc296eef01f3b29793f.jpg" pic_ext="jpeg" width="541" height="750" data-pinit="registered" style="cursor: url(http://tb2.bdstatic.com/tb/static-pb/img/cur_zin.cur), pointer;"></div>')

0 0
原创粉丝点击