如何从bs4对象解码utf8文本?

2024-05-16 10:30:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在从this website中提取所有标题和URL,但即使在检查编码为utf-8的请求之后,也会使用一些符号来代替重音符号

这是我的密码:

from bs4 import BeautifulSoup
import requests

url = "https://www.gov.br/planalto/pt-br/acompanhe-o-planalto/discursos"

r = requests.get(url)
print(f"The encoding is {r.encoding}")
soup = BeautifulSoup(r.text, 'html.parser')

lista_de_discursos = soup.find_all(name="a", attrs={"class": "summary"})

for x in lista_de_discursos:
    print(x.text)
    print("---")

下面是来自请求和一些文章标题的编码提交的输出

The encoding is utf-8
Discurso do Presidente da Rep�blica, Jair Bolsonaro, durante a apresenta��o do Projeto da Ponte de acesso ao Bairro Boa Esperan�a e ao Quilombo S�o Pedro - Eldorado/SP
---
Discurso do Presidente da Rep�blica, Jair Bolsonaro, durante a Apresenta��o de Projeto da Ponte sobre o Rio Pariquera-A�u - Pariquera-A�u/SP
---
Discurso do Presidente da Rep�blica, Jair Bolsonaro, durante entrega do Disc�bolo de Ouro - Pal�cio do Planalto

我怎样才能得到Repúblicaapresentação而不是Rep�blicaapresenta��o

换句话说,如何在输出时将编码设置为UTF-8


Tags: 编码dedoencodingdaprintreppresidente
2条回答
  • 此功能取决于环境。
    • 原始代码在python控制台中打印字符,而不是在JupyterLab中
    • 正如Henrique Branco所指出的,在VS代码中,这是ConsoleTerminal输出之间的差异
  • r.text更改为r.content.decode('utf-8')
  • 或者,正如Mark Ransom所评论的,repr(x.text)也可以工作
  • 不同之处在于,打印时soup对象中的所有内容都被解码,而输出str则被解码
url = "https://www.gov.br/planalto/pt-br/acompanhe-o-planalto/discursos"

r = requests.get(url)
print(f"The encoding is {r.encoding}")
soup = BeautifulSoup(r.content.decode('utf-8'), 'html.parser')

lista_de_discursos = soup.find_all(name="a", attrs={"class": "summary"})

for x in lista_de_discursos:
    print(x.text)
    print(" -")

[out]:
The encoding is utf-8
Discurso do Presidente da República, Jair Bolsonaro, durante a apresentação do Projeto da Ponte de acesso ao Bairro Boa Esperança e ao Quilombo São Pedro - Eldorado/SP
 -
Discurso do Presidente da República, Jair Bolsonaro, durante a Apresentação de Projeto da Ponte sobre o Rio Pariquera-Açu - Pariquera-Açu/SP
 -
Discurso do Presidente da República, Jair Bolsonaro, durante entrega do Discóbolo de Ouro - Palácio do Planalto
 -
Discurso do Presidente da República, Jair Bolsonaro, durante a Homenagem póstuma ao músico Pinto do Acordeon - Brasilia/DF
 -
Discurso do Presidente da República, Jair Bolsonaro, durante o Lançamento do Programa Norte Conectado - Palácio do Planalto
 -
Discurso do Presidente da República, Jair Bolsonaro, durante a  Solenidade de inauguração da Usina de Energia Fotovoltaica -  Caldas Novas/GO

环境/软件包

jupyterlab 2.2.6
Windows 10
beautifulsoup4 4.9.1
requests 2.24.0
python 3.8.5

这听起来可能有点奇怪,但这样打印的唯一原因是因为我使用的是VS代码的输出。奇怪的行为,但问题解决了

VS代码中的输出

enter image description here

终端在VS代码中

enter image description here

问题一解决,我就认为这个问题已经回答了

谢谢

相关问题 更多 >