如何将bs4解析器输出的乱码符号解码为西里尔文?
解决Gismeteo页面爬取的西里尔文乱码问题
问题根源
你遇到的乱码是因为requests默认的编码猜测机制偶尔失效,把页面的UTF-8编码错误解析成了Windows-1250或ISO-8859-1,导致西里尔文显示异常。
解决方案
直接让BeautifulSoup处理原始响应字节,而非requests已经解码后的文本。BeautifulSoup自带编码检测功能,能更准确识别页面编码。
修改后的代码
import requests from bs4 import BeautifulSoup gismeteo = 'https://www.gismeteo.ua/ua/weather-novomoskovsk-10961/weekly/' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:103.0) Gecko/20100101 Firefox/103.0' } req1 = requests.get(gismeteo, headers=headers) # 用response.content(原始字节)代替response.text data1 = BeautifulSoup(req1.content, 'html.parser') day_a1 = data1.find('div', class_='widget-row widget-row-days-date') day_b1 = [da1.text.replace('\n', '').strip() for da1 in day_a1] print(day_b1)
补充说明
- 若需手动指定编码,可通过
chardet库检测字节内容的编码:import chardet encoding = chardet.detect(req1.content)['encoding'] data1 = BeautifulSoup(req1.content.decode(encoding), 'html.parser') - 避免将列表转成字符串输出(
str([...])),直接打印列表能保持更清晰的格式。
内容的提问来源于stack exchange,提问作者Dmytro Raiko
相关产品推荐
相关产品推荐

