首页 > 解决方案 > 使用 bs4 解析 utf-8 编码页面中的特殊字符的问题

问题描述

我正在尝试解析页面,但遇到了一些特殊字符问题,例如 é è à 等。

根据火狐页面信息工具,页面采用UTF-8编码

我的代码如下:

import bs4
import requests


url = 'https://www.registreentreprises.gouv.qc.ca/RQEntrepriseGRExt/GR/GR99/GR99A2_05A_PIU_AfficherMessages_PC/ActiEcon.html'

page = requests.get(url)

cae_obj_soup = bs4.BeautifulSoup(page.text, 'lxml', from_encoding='utf-8')
list_all_domain = cae_obj_soup.find_all('th')

for element in list_all_domain:
    print(element.get_text())

输出是:

Pêche et piégeage
Exploitation forestière

我尝试使用iso-8859-1(法语编码)和其他一些编码更改编码但没有成功。我阅读了几篇关于解析特殊字符的帖子,它们基本上指出这是选择正确编码的问题。是否有可能我无法正确解码某些特定网页上的特殊字符,或者我做错了什么?

标签: pythonbeautifulsoupcharacter-encoding

解决方案


requests 库对网页的解码采取了严格的方法。另一方面,BeautifulSoup 拥有强大的工具来确定文本的编码。所以最好将请求的原始响应传递给 BeautifulSoup,让 BeautifulSoup 尝试确定编码

>>> r = requests.get('https://www.registreentreprises.gouv.qc.ca/RQEntrepriseGRExt/GR/GR99/GR99A2_05A_PIU_AfficherMessages_PC/ActiEcon.html')
>>> soup = BeautifulSoup(r.content, 'lxml')
>>> list_all_domain = soup.find_all('th')
>>> [e.get_text() for e in list_all_domain]
['Agriculture', "Services relatifs à l'agriculture", 'Pêche et piégeage', ...]

推荐阅读