我下载了一些带有请求的网页,并使用Django的ORM将内容保存在postgres数据库中[文本字段中]。对于正在发生的事情,你可以看看:
art = Article()
page = requests.get("http://example.com")
art.raw_html = page.content
art.save()
我验证了page.content是一个字节对象,我想我假设这个对象在保存时会自动解码,但它似乎不是……它被转换成了字节对象的一些奇怪的字符串表示,表面上是Django。当我调用art.raw_html:时,它在解释器中看起来是这样的
'b'<!DOCTYPE html>\n<html lang="en" class="pb-page"
如果我称之为打印,我会得到这个:
b'<!DOCTYPE html>n<html lang="en" class="pb-page"
在我的一生中,我不能将它重新编码为字节对象,即使我去掉了前导b'和尾随b'。
我觉得有一个简单的解决方案,我觉得自己像个白痴。。。但经过大量的实验和谷歌搜索,我没有弄清楚。
顺便说一句,如果我手动复制print语句返回的内容(就像用光标一样(,我可以很好地将剪贴板内容转换回字节对象,然后将其解码为一些可读格式的html。
显然还有更好的方法。(是的,今后我将首先停止保存这样的内容。(
您可以使用eval或ast.literal_eval,如下所示。
data = "b'gAAAAABc1arg48DmsOwQEbeiuh-FQoNSRnCOk9OvXXOE2cbBe2A46gmP6SPyymDft1yp5HsoHEzXe0KljbsdwTgPG5jCyhMmaA=='"
eval(data)
b'gAAAAABc1arg48DmsOwQEbeiuh-FQoNSRnCOk9OvXXOE2cbBe2A46gmP6SPyymDft1yp5HsoHEzXe0KljbsdwTgPG5jCyhMmaA=='
使用ast.literal_eval
import ast
ast.literal_eval(data)
感谢@juanpa.arrivilaga。我刚刚添加了回复。