python3 解析html

本文详细解析了HTML模块html.parser.HTMLParser,并展示了如何通过创建自定义子类来实现对特定HTML标签的解析与处理。通过实例演示了如何筛选并处理目标标签,包括属性过滤与实体处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

解析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>')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值