Estou tentando raspar um site, mas isso gera um erro.
Estou usando o seguinte código:
import urllib.request
from bs4 import BeautifulSoup
get = urllib.request.urlopen("https://www.website.com/")
html = get.read()
soup = BeautifulSoup(html)
print(soup)
E estou recebendo o seguinte erro:
File "C:\Python34\lib\encodings\cp1252.py", line 19, in encode
return codecs.charmap_encode(input,self.errors,encoding_table)[0]
UnicodeEncodeError: 'charmap' codec can't encode characters in position 70924-70950: character maps to <undefined>
Oque posso fazer para consertar isso?
python
beautifulsoup
urllib
SstrykerR
fonte
fonte
Corrigi-o adicionando
.encode("utf-8")
asoup
.Isso significa que
print(soup)
se tornaprint(soup.encode("utf-8"))
.fonte
bytes
objeto, que será impresso como uma bagunça de\x
sequências, se houver muito texto codificado em UTF-8. Eu recomendo usarwin_unicode_console
, como sugere o @JFSebastian.b'\x02x\xc2\xa9'
(um objeto bytes) em vezprint(soup.encode("utf-8"))
trabalhou para mim, mas antes que eu tive que também adicionarwith open("f_name", encoding="utf-8") as f: soup = BeautifulSoup(f, "html.parser")
No Python 3.7, e executando o Windows 10, isso funcionou (não tenho certeza se ele funcionará em outras plataformas e / ou outras versões do Python)
Substituindo esta linha:
with open('filename', 'w') as f:
Com isso:
with open('filename', 'w', encoding='utf-8') as f:
A razão pela qual está funcionando é porque a codificação é alterada para UTF-8 ao usar o arquivo, para que os caracteres em UTF-8 possam ser convertidos em texto, em vez de retornar um erro quando encontrar um caractere UTF-8 que é não suporta a codificação atual.
fonte
Ao salvar a resposta da solicitação de obtenção, o mesmo erro foi lançado no Python 3.7 na janela 10. A resposta recebida da URL, a codificação foi UTF-8, portanto, é sempre recomendável verificar a codificação para que a mesma possa ser passada para evitar esse problema trivial pois realmente mata muito tempo na produção
Quando adicionei encoding = "utf-8" ao comando open, ele salvou o arquivo com a resposta correta
fonte
Até eu enfrentei o mesmo problema com a codificação que ocorre quando você tenta imprimi-lo, lê / escreve ou abre. Como outros mencionados acima, adicionar .encoding = "utf-8" ajudará se você estiver tentando imprimi-lo.
Se você estiver tentando abrir dados raspados e talvez gravá-los em um arquivo, abra o arquivo com (......, encoding = "utf-8")
fonte
Para aqueles que ainda estão recebendo esse erro, adicionar
encode("utf-8")
aosoup
também corrigirá isso.fonte
soup
não é mais umBeautifulSoup
objeto depois de fazer isso de modo que não pode ser manipulado ou procurou