我正在尝试使用BeautifulSoup库从网站上搜集一些定居点的名称。该网站使用'windows-1250'字符集,但某些字符无法正确显示。查看和解的姓氏,应该是Župkov。
你能帮我解决这个问题吗? 这是代码:
contentDocument
我使用的是Python 3.5.1和beautifulsoup 4.4.1。
答案 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对象,你会看到它现在得到正确的编码,你的输出就可以了。