我想和巴西中央银行的网站合作。你知道吗
我的问题是从通知部分得到数据,什么时候与“互换”(央行在当地市场出售美元以控制国家货币贬值)有关。你知道吗
我在处理API和编码方面遇到了很多麻烦。 这是我们可以找到所有报告的网站部分:http://www.bcb.gov.br/pre/normativos/busca/buscaNormativo.asp?tema=&startRow=0&refinadorTipo=&refinadorRevogado=&tipo=P&tipoDocumento=0&numero=&conteudo=&dataInicioBusca=13%2F6%2F2018&dataFimBusca=16%2F6%2F2018
当我尝试从主页获取html时,我得到了以下结果:
Divulga as condi\u00e7\u00f5es de oferta p\u00fablica para a realiza\u00e7\u00e3o de opera\u00e7\u00f5es de swap
但应该是:
Divulga as condições de oferta pública para a realização de operações de swap.
我试过以下代码:
import requests
from bs4 import BeautifulSoup as bs
url = 'http://www.bcb.gov.br/pre/normativos/busca/buscaSharePoint.asp?conteudo=swap&startRow=0'
data = requests.get(url)
bsObj = bs(data.content, 'lxml')
bsObj.find("div") #returned the example, with the wrong encode
bsObj = bs(data.content, 'lxml', from_encoding='latin-1')
bsObj.find("div") #the same
bsObj = bs(data.content, 'lxml', from_encoding='utf-8')
bsObj.find("div") #the same
有人知道发生了什么吗?你知道吗
字符
ç
是U+00e7,õ
是U+00F5,依此类推。这只是同一个字符串的两种不同表示形式。所以,虽然我只是在猜测你的问题,给出了不完整的信息,我认为这是一个有根据的猜测如果您
print
这个字符串,您将看到人类可读的版本,带有condições
等等(除非您的Python和控制台没有被配置为正确地相互对话,但是如果您使用的是python3.6或更高版本,以及Linux、macOS或Windows的合理的现代版本,这不太可能是一个问题)。你知道吗但是,如果您只是在交互式解释器中计算字符串,您将得到程序员友好的表示,而不是人类友好的表示。你知道吗
例如:
后者很好,因为您可以将它作为字符串文本复制并粘贴到源代码中,而且它甚至可以在配置不好的终端上工作,但对于阅读来说就不太好了。你知道吗
技术上的区别是} ,而在交互式解释器中计算字符串时不} 。你知道吗
print
调用^{print
调用^{同时:大多数网站指定了它们的编码(至少以三种不同方式中的一种……),在这种情况下,如果您使用
text
而不是content
,则requests
可以自动正确解码:除此之外,做任何事情的唯一原因是如果网站被破坏并且混淆了
requests
。你知道吗如果您只是使用
data.content
,那么BeautifulSoup将使用一个名为unicodedammit
的库来试探性地尝试猜测正确的编码。你知道吗如果您使用
data.content
和from_encoding
,那么您必须知道正确的编码,这样才能将其传入。这是一个有用的最后手段,但不应该是第一件事,你转向。你知道吗我怀疑
from_encoding=Latin-1
和from_encoding=UTF-8
实际上没有做同样的事情。他们当然不应该。更可能的是,前者给了你一个不同的,不正确的编码,但你只是没有注意到它是不同的。可能是这样的:如果您不熟悉100000字符的Unicode表(十六进制),那么看起来可能不会有太大的不同,但是如果您
print
了解它,您会发现它有很大的不同:相关问题 更多 >
编程相关推荐