无法使用BeautifulSoup正确显示字符

时间:2016-11-27 08:36:26

标签: python character-encoding beautifulsoup

我正在尝试使用BeautifulSoup库从网站上搜集一些定居点的名称。该网站使用'windows-1250'字符集,但某些字符无法正确显示。查看和解的姓氏,应该是Župkov。

你能帮我解决这个问题吗? 这是代码:

contentDocument

我使用的是Python 3.5.1和beautifulsoup 4.4.1。

3 个答案:

答案 0 :(得分:0)

可能服务器发送有关UTF-8的HTTP标头信息,但HTML使用Win-1250。因此requests使用UTF-8来解码数据。

但是你可以获得原始数据source_code.content并使用decode('cp1250')来获得正确的字符。

plain_text = source_code.content.decode('cp1250')

或者,您可以在获得encoding

之前手动设置text
source_code.encoding = 'cp1250'

plain_text = source_code.text

您还可以在source_code.content中使用原始数据BS,因此它应该使用有关编码的HTML信息

 obce_soup = BeautifulSoup(source_code.content, 'html.parser')

 print(obce_soup.declared_html_encoding)

答案 1 :(得分:0)

由于你知道网站的编码,你可以使用响应的内容显式传递给BeautifulSoup构造函数,而不是文本:

source_code = requests.get(obce_url)
content = source_code.content
obce_soup = BeautifulSoup(content, 'html.parser', from_encoding='windows-1250')

答案 2 :(得分:0)

问题不在于beautifulsoup,它只是无法确定你有什么编码(尝试print('encoding', obce_soup.original_encoding)),这是由你把它交给Unicode而不是字节引起的。

如果您尝试这样做:

obce_url = 'http://www.e-obce.sk/zoznam_vsetkych_obci.html?strana=2500'
source_code = requests.get(obce_url)
data_bytes = source_code.content  # don't use .text it will try to make Unicode
obce_soup = BeautifulSoup(data_bytes, 'html.parser')
print('encoding', obce_soup.original_encoding)

创建你的beautifulsoup对象,你会看到它现在得到正确的编码,你的输出就可以了。