我正在使用urllib2来获取网站的源代码,然后我使用正则表达式过滤bas64编码的字符串,并迭代它将匹配传递给函数:
def Base64Decoder(match): curMatch = match.group().decode('utf-8', errors='ignore') decoded = base64.b64decode(curMatch) return decoded
当我打印出Base64Decoder的返回值时,某些字符错误,如何正确过滤它们?我不想看到如下的乱语:
网站的编码是utf-8但是urllib的返回值似乎是unicode? p>
编辑:源代码看起来像这样(原始)
<td style="text-align:left; font-weight:bold;"><script type="text/javascript">document.write(Base64.decode("MzEuMTMuMTcuMjE0"))</script></td>
并且过滤后的字符串Base64.decode("MzEuMTMuMTcuMjE0
条带化为MzEuMTMuMTcuMjE0
答案 0 :(得分:1)
您可能没有正确剥离它,Base64.decode("
前缀也会在条带后留在字符串中。您可以在下一个示例中看到:
>>> print base64.b64decode('Base64.decode("MzEuMTMuMTcuMjE0')
��^r�^31.13.17.214
如果你有类似的模式:
>>> pattern = re.compile('Base64.decode\("(...)"\)')
(参见问题:RegEx to parse or validate Base64 data)
group()
将返回完全匹配的字符串:
>>> pattern.search(s).group()
'Base64.decode("MzEuMTMuMTcuMjE0")'
你需要的是:
>>> pattern.search(s).groups()[0]
'MzEuMTMuMTcuMjE0'