使用BeautifulSoup解析网站时解码非拉丁字符的问题
解决西里尔字母乱码问题
抓取目标网站表格时,得到的DataFrame及HTML源码中出现делий、бÑÐ这类乱码,无法正常显示西里尔字母,解决方法如下:
问题原因
网站响应内容采用Windows-1251编码,但requests库自动识别为UTF-8,导致解码错误,出现乱码。
修改后的代码
import requests from bs4 import BeautifulSoup import pandas as pd url = 'http://www.bvbf.ru/food_paper.html' page = requests.get(url) # 手动指定正确的编码为Windows-1251 page.encoding = 'Windows-1251' soup = BeautifulSoup(page.text, 'lxml') table1 = soup.find('table', id='table1') headers = [th.text for th in table1.find_all('th')] mydata = pd.DataFrame(columns=headers) for row in table1.find_all('tr')[1:]: row_data = [td.text for td in row.find_all('td')] # 用pd.concat替代已弃用的append方法 mydata = pd.concat( [mydata, pd.Series(row_data, index=mydata.columns[:len(row_data)]).to_frame().T], ignore_index=True )
说明
- 核心修复:通过
page.encoding = 'Windows-1251'强制指定编码,让requests用正确的编码解析响应内容,即可正常显示西里尔字母。 - 代码优化:简化了原代码的循环逻辑,同时替换了Pandas已弃用的
append方法,改用pd.concat保证代码兼容性。
内容的提问来源于stack exchange,提问作者Levdar Armenia
相关产品推荐
相关产品推荐

