【发布时间】:2018-04-20 10:59:08
【问题描述】:
请帮忙,因为这个翻转程序是我持续的噩梦!
我有几个包含一些 base64 编码字符串的文件。 示例文件的一部分内容如下:
charset=utf-8;base64,I2JhY2tydW5uZXJfUV81c3R7aGVpZ2h0OjkzcHg7fWJhY2tydW5uZXJfUV81c3R7ZGlzcGxheTpibG9jayFpbXBvcnRhbnQ7fQ=="
它们始终采用“ANYTHINGbase64,STRING”格式 它是 html,但我将其视为一个大字符串并在其他地方使用 BeautifulSoup。我正在使用正则表达式'base'来提取base64字符串,然后根据我定义的函数“debase”使用base64模块对其进行解码。
这在一定程度上似乎没问题:b64encode 的输出由于某种原因添加了不必要的东西:
b'#backrunner_Q_5st{height:93px;}backrunner_Q_5st{display:block!important;}' 中间是字符串。
我猜这意味着以字节为单位;所以我尝试让我的函数将其编码为 utf8,但基本上我已经超出了我的深度。
我想要的最终结果是让我的 html 中的所有“base64,STRING”都被解码并替换为 DECODEDSTRING。
请帮忙!
import os, sys, bs4, re, base64, codecs
from bs4 import BeautifulSoup
def debase(instr):
outstring = base64.b64decode(instr)
outstring = codecs.utf_8_encode(str(outstring))
outstring.split("'")[1]
return outstring
base = re.compile('base64,(.*?)"')
for eachArg in sys.argv[1:]:
a=open(eachArg,'r',encoding='utf8')
presoup = a.read()
b = re.findall(base, presoup)
for value in b:
re.sub('base64,.*?"', debase(value))
print(debase(value))
soup=BeautifulSoup(presoup, 'lxml')
bname= str(eachArg).split('.')[0]
a.close()
[s.extract() for s in soup('script')]
os.remove(eachArg)
b=open(bname +'.html','w',encoding='utf8')
b.write(soup.prettify())
b.close()
【问题讨论】:
-
中间的那些字符确实存在于base64编码的字符串中;字符集告诉您编码是 utf8,如果您使用
utf8解码这些字节,您将得到“相同”的结果:都是 ASCII。所以问题是为什么这些字符存在于base64编码的字符串中。根据您的输出,我认为您的解码尝试是正确的。 -
对不起,我不明白的是有一个额外的 b' ' 和撇号,我正在尝试删除
-
所以我希望能够以纯文本形式交换它。但输出似乎是二进制或字节数据
标签: python html beautifulsoup base64 decoding