我有一根绳子:
'BZh91AY&SYA\xaf\x82\r\x00\x00\x01\x01\x80\x02\xc0\x02\x00 \x00!\x9ah3M\x07<]\xc9\x14\xe1BA\x06\xbe\x084'
我想要:
^{pr2}$但我一直得到:
b'BZh91AY&SYA\\xaf\\x82\\r\\x00\\x00\\x01\\x01\\x80\\x02\\xc0\\x02\\x00 \\x00!\\x9ah3M\\x07<]\\xc9\\x14\\xe1BA\\x06\\xbe\\x084'
上下文
我从网页上刮下一个字符串并将其存储在变量un
中。现在我想用BZip2解压:
bz2.decompress(un)
但是,由于un
是一个str
对象,我得到了以下错误:
TypeError: a bytes-like object is required, not 'str'
因此,我需要将un
转换为类似字节的对象,而不将单个反斜杠更改为转义的反斜杠。在
编辑1: 谢谢你的帮助! @我现在明白你的意思了,但我不知道如何从我的网络垃圾收集方法中检索到一个类似字节的对象:
r = requests.get('http://www.pythonchallenge.com/pc/def/integrity.html')
doc = html.fromstring(r.content)
comment = doc.xpath('//comment()')[0].text.split('\n')[1:3]
pattern = re.compile("[a-z]{2}: '(.+)'")
un = re.search(pattern, comment[0]).group(1)
我使用的包是requests
、lxml.html
、re
和{
再一次,我的目标是使用bz2
解压un
,但是我很难从我的webscraping过程中获得一个类似字节的对象。在
有什么建议吗?在
如果我正确理解您的目标,可以通过以下方式实现:
结果是:
^{pr2}$关于这个有一个很好的讨论,所以post如果这还不够的话。他们讨论了将UTF-8字符串编码到字节数组的最佳方法(根据PEP),以及类涉及的其他方法。在
你的bug早就存在了。唯一可接受的解决方案是更改抓取代码,使其返回字节对象而不是文本对象。不要试图将字符串
un
转换为字节,这样做是不可靠的。在执行以下操作:
“raw_unicode_escape”只是一种拉丁语-1编码,它为外部的字符提供了一个内置的回退机制。此编码对其他代码点使用\uxxx和\UXXXXXXXX。现有的反斜杠不会以任何方式转义。它在Python pickle协议中使用。对于不能用\xXX序列表示的Unicode字符,数据将损坏。
web抓取代码没有业务返回bz2编码的字节作为
str
,因此您需要解决问题的原因,而不是试图处理症状。在相关问题 更多 >
编程相关推荐