微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何从bs4汤对象中解码utf-8文本?

如何解决如何从bs4汤对象中解码utf-8文本?

我正在从this website提取所有标题和网址,但即使在检查了编码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,durante a Apresenta��o de Projeto da Ponte sobre o Rio Pariquera-A�u - Pariquera-A�u/SP
---
discurso do Presidente da Rep�blica,durante entrega do disc�bolo de Ouro - Pal�cio do Planalto

如何获取Repúblicaapresentação而不是Rep�blicaapresenta��o

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

解决方法

  • 此功能取决于环境。
    • 原始代码可以在python控制台中打印字符,而不会在JupyterLab中打印。
    • Henrique Branco所述,在VS Code中,它是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,durante a Apresentação de Projeto da Ponte sobre o Rio Pariquera-Açu - Pariquera-Açu/SP
---
Discurso do Presidente da República,durante entrega do Discóbolo de Ouro - Palácio do Planalto
---
Discurso do Presidente da República,durante a Homenagem póstuma ao músico Pinto do Acordeon - Brasilia/DF
---
Discurso do Presidente da República,durante o Lançamento do Programa Norte Conectado - Palácio do Planalto
---
Discurso do Presidente da República,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 Code的输出。行为奇怪,但问题解决了。

VS代码中的输出

enter image description here

VS代码中的终端

enter image description here

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

谢谢!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?