Python使用BeautifulSoup网页抓取提取文本出现乱码问题求解
乱码原因
出现该乱码是网页内容的UTF-8编码被错误以ISO-8859-1(Latin-1)编码解码导致的字符异常,核心问题是requests自动识别网页编码时出现偏差。
解决方法
你可以任选以下任意一种方案修改代码:
- 方案1:手动指定requests响应编码后使用文本内容解析
resp = requests.get(url) # 强制指定编码为UTF-8,覆盖requests的自动识别结果 resp.encoding = 'utf-8' tree = html.fromstring(resp.text) element = tree.xpath('/html/body/div[1]/div[7]/div[2]/text()') t = element[1] print(t)
- 方案2:手动将字节内容按UTF-8解码后再解析
resp = requests.get(url) # 直接对字节内容做UTF-8解码 html_content = resp.content.decode('utf-8') tree = html.fromstring(html_content) element = tree.xpath('/html/body/div[1]/div[7]/div[2]/text()') t = element[1] print(t)
验证&排查
修改代码前可先打印resp.encoding确认requests自动识别的编码,如果输出为ISO-8859-1即可确认是编码识别错误问题,上述方案可解决该场景的乱码。
如果修改代码后打印仍显示乱码,排查运行代码的终端编码是否为UTF-8:Windows系统的CMD/PowerShell默认使用GBK编码,不支持特殊UTF-8字符显示,可切换到支持UTF-8的终端(如VS Code内置终端、Git Bash)运行代码。
内容的提问来源于stack exchange,提问作者ECohen
相关产品推荐
相关产品推荐

