html.parser无法完全解析网页之BUG的修正

html.parser使用正则表达式解析html代码

 

在使用中发现部分网页无法完全解析,跟踪发现因为网页中有这样的代码

<a href="www.baidu.com"style="hot">badidu</a>

 

而html.parser定位tag使用的正则如下

locatestarttagend = re.compile(r"""
  <[a-zA-Z][-.a-zA-Z0-9:_]*          # tag name
  (?:\s+                             # whitespace before attribute name
    (?:[a-zA-Z_][-.:a-zA-Z0-9_]*     # attribute name
      (?:\s*=\s*                     # value indicator
        (?:'[^']*'                   # LITA-enclosed value
          |\"[^\"]*\"                # LIT-enclosed value
          |[^'\">\s]+                # bare value
         )
       )?
     )
   )*
  \s*                                # trailing whitespace
""", re.VERBOSE)

它认为属性和属性间是有空格隔开的,遇到上面的例子就解析失败了

 

因此修改正则

locatestarttagend = re.compile(r"""
  <[a-zA-Z][-.a-zA-Z0-9:_]*              # tag name
  (?:\s*(?=>)                            # tag without attributes
    |\s+                                 # whitespace before attribute name
     (?:\s*                              # whitespace between attributes
        (?:[a-zA-Z_][-.:a-zA-Z0-9_]*     # attribute name
          (?:\s*=\s*                     # value indicator
            (?:'[^']*'                   # LITA-enclosed value
              |\"[^\"]*\"                # LIT-enclosed value
              |[^'\">\s]+                # bare value
             )
           )?
        )
     )*
     \s*                                # trailing whitespace
  )
""", re.VERBOSE)

 

顺利解析全部网页

转载于:https://www.cnblogs.com/sqxy110/p/4881761.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值